Ok, so taking into account the comments etc to my post something like this:
For ease of display here, I'm using on page styles, but you can easily use off page references.
Declaring the following styles:
<!-- media="print" means these styles will only be used by printing
devices -->
<style type="text/css" media="print">
.printable{
page-break-after: always;
}
.no_print{
display: none;
}
</style>
<!-- media="screen" means these styles will only be used by screen
devices (e.g. monitors) -->
<style type="text/css" media="screen">
.printable{
display: none;
}
</style>
<!-- media types can be combined with commas to affect multiple devices -->
<style type="text/css" media="screen,print">
h1{
font-family: Arial, Helvetica, sans-serif;
font-size: large;
font-weight: bold;
}
</style>
Then, you're going to need to do some heavy lifting in your view to get HTML looking something like this:
<!-- Intial display for screen -->
<div class="no_print">
<!-- Loop through users here using preferred looping/display method -->
<ul>
<li>Bob</li>
<li>Fred</li>
<li>John</li>
</ul>
</div>
<!-- Now loop through each user, highlighting as you go, but for printer* -->
<div class="printable">
<ul>
<li><b>Bob</b></li>
<li>Fred</li>
<li>John</li>
</ul>
</div>
<div class="printable">
<ul>
<li>Bob</li>
<li><b>Fred</b></li>
<li>John</li>
</ul>
</div>
<div class="printable">
<ul>
<li>Bob</li>
<li>Fred</li>
<li><b>John</b></li>
</ul>
</div>
Now for an "appropriate display method".
I'm just getting started with MVC, so you've probably got a better method of doing this, but for now I'd probably use a RenderPartial method like this:
<%
/*
Using RenderPartial to render a usercontrol,
we're passing in the Model here as the Model for the control,
depends on where you've stored your objects really, then we
create a new anonymous type containing the properties we want
to set.
*/
// Display the main list
Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
ViewData.Model,
new {HighlightUser = null, IsPrintable = false});
// Loop through highlighting each user
foreach (var user in ViewData.Model)
{
Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
ViewData.Model,
new {HighlightUser = user, IsPrintable = true});
}
%>
Your user control can then handle the bulk of the display, setting the class of the containing divs (or whatever element you use) as appropriate, and bolding up the user based on the one passed in - as I said, there's possibly a better way of doing the partial stuff.
Obviously, you probably want completely different rendering of the users for display and print - I guess you're probably adding quite a bit of jQuery goodness hiding and displaying stuff, etc, that you are actually going to display on the printed version, so you probably want two differnt user controls, and can then get away with not passing in the IsPrintable property.
Also, as it stands, this will print a blank page at the end, due to the "page-break-after" style on all divs - you'd possibly want to note that you're on the last div, and have a different style on that, unless you have information that you'd like on that last page.