Хорошо, так что с учетом комментариев и т. Д. К моему посту примерно так:
Для простоты отображения здесь я использую стили страниц, но вы можете легко использовать ссылки вне страниц.
Объявление следующих стилей:
<!-- 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>
Затем вам нужно будет сделать что-то тяжелое в своем представлении, чтобы HTML выглядел что-то вроде этого:
<!-- 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>
Теперь для "соответствующего метода отображения".
Я только начинаю работать с MVC, поэтому у вас, вероятно, есть лучший способ сделать это, но сейчас я бы, вероятно, использовал такой метод RenderPartial:
<%
/*
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});
}
%>
Ваш пользовательский элемент управления может затем обрабатывать большую часть экрана, устанавливая класс содержащихся элементов (или любой элемент, который вы используете), в зависимости от ситуации, и подбирая пользователя в зависимости от переданного - как я уже сказал, возможно, есть лучший способ сделать частичную работу.
Очевидно, что вам, вероятно, нужно совершенно другое рендеринг пользователей для отображения и печати - я полагаю, вы, вероятно, добавляете немало скрывающих и отображающих jQuery вещей и т. Д., Которые вы фактически собираетесь отобразить в печатной версии. , так что вы, вероятно, захотите два разных пользовательских элемента управления, а затем можете обойтись без передачи свойства IsPrintable.
Кроме того, в существующем состоянии будет напечатана пустая страница в конце из-за стиля «разрыва страницы» для всех элементов div - вы, возможно, захотите отметить, что вы находитесь на последнем элементе div, и придерживайтесь другого стиля, если только у вас нет информации, которая вам нужна на последней странице.