Using print stylesheets with ASP.NET Themes

ASP.NET themes are great (in principle), and allow you to have lots of control on how your pages look with theme-specific skins, stylesheets, images etc.  The only thing that’s a little bit annoying is that you can’t specify (without codebehind) what media the stylesheet should apply to. 


If you add a new stylesheet to your theme folder called ‘printer.css’, ASP.NET will omit the ‘media’ attribute when it’s output to the <head> section, and it will then be subject to the normal order of precedence rules, affecting your screen output.


There may be other easy ways to do this, but W3C generally think of everything, and then the world catches up – so just use the @media rule to surround all your media-specific styles.  The easiest way to organise this is obviously in different style sheets if you’ve got a complex layout.  My simple ‘printer.css’ is below (along with the stylesheet link generated by ASP.NET). 


This simply knocks out the left nav, right side bar and the footer (all divs of course), leaving a relatively clean page for printing. 



<link href=”../App_Themes/corporate/printer.css” type=”text/css” rel=”stylesheet” />


 

Programmatically add Meta Tags to ASP.NET Master Pages using a SiteMap

I hadn’t really used SiteMaps before, but it’s a useful feature of ASP.NET 2.0 (most people using them to drive BreadCrumb controls and site navigation).


After realising there was no support for design of the sitemap (apart from the default text editor) I found a simple (and functional) SiteMap editor here.


I then realised that I needed to add meta tags for each page in the site (NOTE: this is a simple ‘content’ site, so don’t come running to me if you have the need to generate specific tags based on what colour trousers the user is wearing!).


You can add new attributes very easily to the sitemap, and access them programmatically.  The editor has a nice little grid to make this extra easy for you.  In my example here we’ve added a ‘keywords’ attribute. 


Assuming you’re using a treeview (or something similar) for navigation on your site and you’re binding to the SiteMap data source, then you’ll get the context of the current site map node in your page (or master page).


You can then use it to set your meta tags as follows:



You can also set Page.Title from currNode.Title etc.


This is actually quite a neat way to drive things like other standard properties of your master page – e.g. subheadings.