我的页面上有一个标签,当我点击这个标签时,我需要在页面上显示一个pdf文件(浏览器)。 为此,我正在编写像这样的控制功能
public ActionResult PricedPdf(string projID,string fileName)
{
byte[] bArr = new byte[] { };
bArr = getdata();
return File(bArr, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName+".pdf");
}
现在我的问题是当我渲染它时,页面只显示一些不可读的数据而不是pdf。
可能是问题是由于jquery选项卡,我使用的是Jquery选项卡
我用它来代替File,但仍然显示同样的问题
public ActionResult PricedPdf(string projID, string fileName)
{
byte[] bArr = new byte[] { };
bArr = getdata();
Response.AddHeader("Content-disposition", "inline; filename=\"" + fileName + "\"");
Response.ContentType = "application/" + System.IO.Path.GetExtension(fileName).Replace(".", "");
Response.BinaryWrite(bArr);
Response.Flush();
}
答案 0 :(得分:0)
您如何调用此PricedPdf
行动?如果你用AJAX调用它,那就算了吧。您无法从AJAX调用中返回PDF,或者更准确地说,您可以使用它返回PDF,但是您无法使用它。因此,创建一个指向此操作的正常html链接:
<%= Html.ActionLink("show pdf", "PricedPdf") %>
点击生成的锚点后,浏览器将重定向到一个页面,该页面将使用您系统上安装的相应插件打开生成的PDF(如果有的话)。如果您不想在当前浏览器窗口中打开PDF,则可以将target="_blank"
属性添加到锚点。
最后,如果您只想在页面的某些部分打开PDF,可以embed it进入标记。
所以基本上你会有一个控制器动作,它会返回一个包含PDF包含的部分HTML:
public ActionResult SomePartial()
{
return PartialView();
}
部分看起来像这样:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<object type="application/pdf" data="<%= Url.Action("PricedPdf") %>" width="500" height="650">
Click <%= Html.ActionLink("here", "PricedPdf") %> to view the file
</object>
你将在你的AJAX调用中使用这个动作。