Ok, do đó có tính đến ý kiến vv bài một cái gì đó của tôi như thế này:
Để dễ hiển thị ở đây, tôi đang sử dụng kiểu trang nhưng bạn có thể dễ dàng sử dụng các tham chiếu trang.
Tuyên bố phong cách sau:
<!-- 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>
Sau đó, bạn sẽ cần phải làm một số nâng nặng theo quan điểm của bạn để có được HTML tìm kiếm một cái gì đó như thế này:
<!-- 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>
Bây giờ cho một "phương pháp hiển thị thích hợp".
Tôi chỉ bắt đầu với MVC, vì vậy bạn đã có thể có một phương pháp tốt hơn để làm điều này, nhưng bây giờ tôi có thể sử dụng một phương pháp renderPartial như thế này:
<%
/*
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});
}
%>
kiểm soát sử dụng của bạn sau đó có thể xử lý phần lớn màn hình, đặt lớp của các div chứa (hoặc bất kỳ phần tử nào bạn sử dụng) khi thích hợp và bolding lên người dùng dựa trên dữ liệu được truyền vào - như tôi đã nói, có thể là cách tốt hơn để thực hiện một phần công cụ. Rõ ràng, bạn có thể muốn hiển thị hoàn toàn khác nhau của người dùng để hiển thị và in ấn - tôi đoán bạn có thể thêm khá nhiều jQuery tốt đẹp ẩn và hiển thị các công cụ, vv, mà bạn đang thực sự sẽ hiển thị trên các bản in được hiển thị trên màn hình in ấn. Phiên bản, vì vậy bạn có thể muốn hai điều khiển người dùng differnt, và sau đó có thể lấy đi với không đi qua trong các tài sản IsPrintable.
Ngoài ra, khi nó đứng, điều này sẽ in một trang trống ở cuối, do kiểu trang "ngắt sau" trên tất cả các div - bạn có thể muốn lưu ý rằng bạn đang ở trên div cuối cùng và có một phong cách khác trên đó, trừ khi bạn có thông tin mà bạn muốn trên trang cuối cùng đó.
Sau khi tôi đăng bài này, tôi đã không chắc chắn nếu tôi nên có chỉ cần chỉnh sửa câu trả lời trước đây của tôi, http://stackoverflow.com/questions/361802/is-it-ok-to-post-multiple-answers-to-a -question đã không thực sự làm rõ. Nếu mọi người phản đối, tôi rất sẵn lòng kết hợp chúng và xóa mục này. –
Tôi đã xóa +1 của tôi khỏi câu trả lời khác của bạn để bạn có thể xóa câu trả lời đó và giữ lại. Tôi đã quyết định vì những lý do khác mà tôi muốn giữ cho logic quyết định ai sẽ nhận được một bản sao trong bộ điều khiển. Do đó câu trả lời này là khá gần với những gì tôi cần. Cảm ơn. ;) – AnthonyWJones
Bạn có thể thử điều này: $ ('. Printable: last-child'). Css ('page-break-after', 'avoid'); dunno nếu thuộc tính sẽ là trang ngắt sau. –