在ASP.NET MVC的浏览器中显示pdf

时间:2010-06-09 10:18:31

标签: asp.net-mvc pdf

我的页面上有一个标签,当我点击这个标签时,我需要在页面上显示一个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();
}

1 个答案:

答案 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调用中使用这个动作。