2011-02-11 47 views
1

這應該是一個簡單的答案,但由於我是MVC的新手,我還不完全知道我的方式:我想響應用戶點擊通過發送PDF到瀏覽器的鏈接。MVC:如何回發用戶選擇並回復PDF

  • 我有一個ID的字符串,我需要回發到該方法,以便它可以生成請求的內容。
  • 我可以構建PDF作爲暴露給控制器的內存流。
  • 我希望用戶留在他們點擊鏈接的同一頁面上,並顯示「保存到...」對話框。

假設我的控制器被稱爲發票和方法是DownloadInvoice,我應該把我的觀點後的ID後面(串),以及我怎麼向這個回傳迴應?

我可以簡單地用這個

return new FileStreamResult(generatedInvoice.Stream, "application/pdf"); 

迴應或者我需要給觀衆引導到具有完整

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf"); 
Response.Buffer = true; 
Model.Stream.WriteTo(Response.OutputStream); 
Response.End(); 

另一種觀點?

回答

1

不需要另一個視圖。 FileStreamResult應該足夠用於控制器操作(您可能需要使用[Post]屬性來過濾此類操作)。

+0

感謝您的提示,Oded - 請參閱我對之前文章的評論。 另外,我將使用HttpPost和另一個自定義屬性來確保它的授權並來自同一網站。 – awj 2011-02-11 21:10:25

1

你爲什麼不試試呢?

return new FileStreamResult(generatedInvoice.Stream, "application/pdf"); 

返回文件流返回,就像它說:一個文件。這不會向瀏覽器發送任何標題或任何內容,以告訴它加載另一個URL。

+0

好的,所以我可以使用新的FileStreamResult()進行響應,但是如何將用戶選擇發回?有什麼方法可以將這些指向方法和控制器(儘管在這種情況下該方法在同一個控制器上)以及某種包含用戶選擇的對象?請記住,我必須使用一些JavaScript來確定此用戶選擇並對其進行格式化。 – awj 2011-02-11 21:09:19