[英]How to implement multiple files selection and upload using HttpFileCollectionBase in ASP.NET MVC3?
[英]How to implement printing in ASP.Net MVC3
作為給定項目列表中當前任務的一部分,用戶可以選擇其中一些項目並調用“打印”而不選擇所選項目。
對於每個選定的項目,我們需要打印詳細信息。 它類似於在銷售系統中打印所選項目的發票。
我創建了一個部分視圖來編寫每個記錄的詳細信息,但我不確定如何按照我的要求使用它。
我可以在document.ready上調用jQuery print來實現我的要求嗎?
正如@Levib建議的那樣,在我的PrintView中調用部分視圖。 PrintView的document.reay函數調用window.print。 但是當我嘗試調用“打印”時,我看不到打印對話。
這是我的看法,
@section Styles
{
<link rel="stylesheet" href="AdminStyle.css" type="text/css" media="all" />
<link rel="stylesheet" href="AdminPrintOrder.css" type="text/css" media="print" />
}
@foreach (var item in Model)
{
<div id="content" style="page-break-before: always">
@{Html.RenderPartial("_OrderDetailView", item);}
</div>
}
@section scripts
{
<script type="text/javascript">
$(document).ready(function () {
debugger;
window.print();
});
</script>
}
我的打印調用者視圖是
function printInvoices(){
$.ajax({
type: 'POST',
url: '/Batch/PrintInvoices',
data: '{ "allocationId" : "' + unSelected.toString() + '"}',
contentType: "application/json; charset=utf-8",
traditional: true,
success: printedView,
error: errorInSubscribing
});
}
我是否需要處理ajax reposne來填充打印對話框。
function printedView() {
unSelected = [];
}
控制器動作是
[HttpPost]
public ActionResult PrintInvoices(string allocationId)
{
var context = new BatchContext();
var orderDetails = context.GetOrderDetails(RetriveList(allocationId));
return View(orderDetails);
}
'page-break-before: always'
always'CSS屬性應用於它。 這將確保每個局部視圖最終位於不同的頁面上。 在頁面加載上調用'window.print()'
,你就完成了!
鑒於對此答案的評論中提出的大量問題,以下是對需要完成的內容的更詳細說明:
@media print { }
聲明來完成,也可以通過將media="print"
屬性應用於頁面中包含樣式表的link
標記來完成。 您似乎已正確完成此操作。 page-break-before: always
聲明所有元素,在此之前您希望有一個分頁符。 你似乎已經使用內聯樣式完成了這項工作。 就個人而言,我寧願在打印樣式表中完成此操作而不是內聯樣式。 此步驟對於您能夠每頁打印一個項目是不可或缺的。 window.print()
允許您作為頁面作者定義頁面的打印時間。 這與CTRL + P或單擊打印按鈕的功能相同,只是您可以從JavaScript中執行此操作。 window.print()
打印當前在屏幕上的頁面。 如果要打印不同的頁面,則需要以某種形式或形式(可能通過彈出窗口)加載其他頁面,並在該頁面上調用window.print()。 display: none
屬性來執行此操作。 我不反對在必要時將頁面導出為PDF,但由於您沒有特別詢問PDF解決方案,我已經為您提供了HTML + CSS解決方案。 PDF還需要一分鍾來生成和加載。 但是,當您的用戶想要保存他們正在打印的內容的副本時,它們很棒。 如果您的網站屬於這種情況,我強烈建議您考慮這樣的解決方案。
你如何測試打印樣式表? 最簡單的方法是只需點擊Chrome中的打印按鈕,即可顯示網站打印時的外觀。
window.print()
忘記window.print()
,只需通過應用適當的CSS來專注於使頁面看起來應該如此。 編寫CSS,運行頁面,查看Chrome中的輸出,根據需要修改打印樣式表...沖洗並重復。 只有在單擊打印按鈕時才能使頁面完全按照您的要求顯示,然后您才能在JavaScript中自動調用打印功能。
我如何在MVC中打印:
簡單地將Action更改為這樣
public ActionResult PrintInvoice(int invoiceId)
{
return new ActionAsPdf(
"Invoice",
new { invoiceId= invoiceId })
{ FileName = "Invoice.pdf" };
}
我相信它會服從css分頁符,所以如果你只需要每頁打印一個項目,你可以使用該標記強制項目到新頁面。
我將創建一個PDF來更好地控制頁面的布局。
使用jQuery,我將從用戶那里獲取所選項,而不是將ajax調用或簡單的POST調用到接受項目列表作為參數的操作方法,然后返回包含pdf的文件流。
在運行時或設計時,有許多免費和商業的庫可以創建pdf。
我個人使用DevExpress ,我很高興。
作為開源替代方案,您可以考慮使用PDFSharp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.