2016-01-07 121 views
0

我使用iframe標記以調用返回FileResult以顯示PDF文件的ActionMethod。問題出在加載PDF文檔而不是顯示PDF文件名後,它在Chrome中顯示PDF文件名頂部的ActionMethod名稱。Iframe在ASP MVC中加載PDF文件時顯示ActionMethod名稱

剃刀代碼:

<iframe src="@Url.Action("GetAgreementToReview", "Employee")" style="zoom: 0.60; -ms-zoom: 1; width: 100%;" width="99.6%" height="420" frameborder="0" id="agreementPdf"></iframe> 

CS代碼:

public ActionResult GetAgreementToReview() 
{ 
    Response.AddHeader("Content-Disposition", "inline; filename=Master-Agreement.pdf");  
    return File("~/Content/Master-Agreement.pdf", "application/pdf"); 
} 

圖片:正如你可以看到的截圖,它顯示的不是「主 - Agreement.pdf 'GetAgreementToReview',即ActionMethod名」。

enter image description here

有誰知道如何解決這個問題? 謝謝。

Sanjeev

+0

你在所有的瀏覽器中都會發生這種行爲?你正在使用哪一個? – Shyju

+0

目前Chrome瀏覽器 – sanjeev40084

+0

您是否有針對您的問題的解決方案 –

回答

1

我有一個類似的問題,探索幾乎所有的網頁所提供的後找到了解決辦法。

您必須使用自定義路徑爲你的行動,你必須從UI發送文件名到URL本身。 (其他參數不會受到影響)

//add a route property 
[Route("ControllerName/GetAgreementToReview/{fileName?}")] 
public ActionResult GetAgreementToReview(string fileName, int exampleParameter) 
{ 
    byte[] fileData = null; //whatever data you have or a file loaded from disk 

    int a = exampleParameter; // should not be affected 

    string resultFileName = string.format("{0}.pdf", fileName); // you can modify this to your desire 

    Response.AppendHeader("Content-Disposition", "inline; filename=" + resultFileName); 
    return File(fileData, "application/pdf"); //or use another mime type 
} 

而在客戶端,您可以使用任何系統來訪問URL。 這有點哈克,但它的工作原理。

如果您對HTML的iframe來顯示PDF(我有問題),它看起來是這樣的:

<iframe src='/ControllerName/GetAgreementToReview/my file?exampleParameter=5' /> 

而這樣一來,你有manipulatic文件名的dinamyc方式由所示IFRAME只使用網頁上顯示的名稱的URL的最後部分(很煩人)。下載的文件名將由服務器端的Content-disposition命名。

希望它有幫助!