2014-07-25 71 views
0

我目前使用pdf庫生成PDF服務器端。當這完成後,我嘗試將這個pdf返回給用戶。返回文件沒有正確返回pdf MVC 5

每當我嘗試打開PDF失敗,或者如果我強制下載,下載爲損壞的文件。如果我在瀏覽器中輸入pdf的物理地址,它會正常加載。

在我的控制器:

return File(nfilePath, "application/pdf");

在這種情況下nfilePath =〜/ PdfStore/CurRep103323842.pdf

林的東西這個簡單難倒,任何意見將是非常美妙。謝謝。

查看加載局部視圖

@model PrintShiftHandover.Models.ShiftHandOver 

@{ 
    ViewBag.Title = "ShiftHandOver"; 
} 

<div id="updateRegion"> 

@{Html.RenderAction("_ReportDetails");} 

</div> 

局部視圖。

@model PrintShiftHandover.Models.MainReportDetail 

@{ 
    Layout = string.Empty; 
} 

<div id="PartialView"> 
@using (Html.BeginForm()) 
{ 

......這裏是一個表單。

} 
</div> 

控制器。

[HttpPost] 
    public ActionResult _ReportDetails(Models.MainReportDetail model) 
    { 
       var getfile = new CreatePdf(); 
       var nfilePath = getfile.GetFile(model); 


       return File(nfilePath, "application/pdf"); 

     } 
     catch(Exception ex) 
     { 
      ModelState.AddModelError("",ex.Message); 

      return View(model); 
     } 
    } 

生成的pdf包含從主視圖生成的HTML,在div內部updateregion是pdf編碼所在的位置。

+0

我敢打賭,如果您在文本編輯器中打開下載的文件,它會顯示一條錯誤消息。 – DavidG

+0

那麼這個文件在記事本這樣的文本編輯器中看起來像什麼呢? – DavidG

+0

奇怪的只是在記事本++中打開它的PDF編碼是在那裏,但在它的頂部是從我的網站的HTML。這是從偏視圖控制器完成的,它有什麼不同嗎? – GrahamHull

回答

0

要調用@Html.RenderAction這基本上是嵌入了您的輸出中的PDF文件。

您需要用一個按鈕/鏈接替換它,而不是呼叫@Html.ActionLink。因此,更換這行:

@{Html.RenderAction("_ReportDetails");} 

有了:

@Html.ActionLink("_ReportDetails") 

或者,你可以把一個元刷新標記或jQuery的強制文件下載的情況發生。

+0

謝謝,我推測無論何時發生文件操作,它都會覆蓋所發生的任何事情。 – GrahamHull

0

你不能在你的路徑中使用「〜」。

嘗試:

//Convert to absolute path 
nfilePath = HttpContext.Current.Server.MapPath(nfilePath); 
return File(nfilePath, "application/pdf"); 
+0

我以前試過這個,應該說在我的答案中,它確實然後參考本地文件,例如:c:\ users \ asde \ documents \ visual studio 2013 \ Projects \ PdfProj \ PdfProj \ PdfStore \ ...但仍然做同樣的事情。 – GrahamHull

+0

是否有例外?下載的文件與原始文件大小相同嗎? – SynerCoder

+0

在IE瀏覽器中沒有例外的情況,Adobe表示:文件不與'%.PDF'相關,文件比原始文件大15kb。 – GrahamHull