Asp.net mvc 2 在ajax.action链接的部分页面上显示内联文档

Asp.net mvc 2 在ajax.action链接的部分页面上显示内联文档,asp.net-mvc-2,asp.net-ajax,file,content-type,Asp.net Mvc 2,Asp.net Ajax,File,Content Type,我正在调用页面上的ajax.action链接。这将显示文档的名称。当我点击文档时,会向控制器发出一个ajax请求,该请求将返回一个文件内容结果,我希望该文件在浏览器的targetID div下内联显示 Code-bytestream=fs.ToArray(); fs.Close(); AppendHeader(“Content Disposition”,String.Format(“inline;filename={0}”,filename)); 返回文件(bytestream,“applica

我正在调用页面上的ajax.action链接。这将显示文档的名称。当我点击文档时,会向控制器发出一个ajax请求,该请求将返回一个文件内容结果,我希望该文件在浏览器的targetID div下内联显示

Code-bytestream=fs.ToArray(); fs.Close(); AppendHeader(“Content Disposition”,String.Format(“inline;filename={0}”,filename)); 返回文件(bytestream,“application/pdf”)

问题是,文件显示为流,并且没有正确显示内容

    <legend>Document</legend>
    <% if (Model.PresentDocument != null)
       { %>
    <li><%: Ajax.ActionLink(Model.PresentDocument, "GetDocumentPage", new RouteValueDictionary(new { controller = "Document", action = "GetDocumentPage", id = Model.PresDocId }), new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "Document" })%></li>
    <%} %>
    <div id="Document">
    </div>
文档

  • 我是否需要为此div执行任何特定操作以显示内联pdf?

    您不能使用AJAX下载文件。实现这一点的一种可能方法是使用普通链接,单击此链接时,使用javascript动态生成iframe并将iframe源指向控制器操作:

    <%= Html.ActionLink(
        Model.PresentDocument, 
        "GetDocumentPage", 
        "Document",
        new { id = Model.PresDocId }, 
        new { id = "displayPdf" }
    ) %>
    

    哇!这很有魅力。非常感谢。有没有一种方法可以将ajax“targetID”映射到iframe?基本上,在我编写的代码中,它将流正确地下载到浏览器中,但不显示内容。只是好奇@桑杰,不可能。您需要使用
    iframe
    src
    属性将其指向将返回内容的服务器脚本。谢谢!在您编写的控制器代码中,返回值不需要是FileContentResult吗?@Sanjay,当您使用
    返回文件
    方法时,根据您要传递的第一个参数的类型,它将返回正确的内容类型。是的,它可以工作。你是最棒的!浪费了大约一天的时间弄清楚为什么我的文件没有显示出来。再次感谢
    $(function() {
        $('#displayPdf').click(function() {
            $('#Document').html(
                $('<iframe/>', {
                    src: this.href,
                    width: '300px',
                    height: '150px'
                })
            );
            return false;
        });
    });
    
    public ActionResult GetDocumentPage(string id)
    {
        byte[] pdf = ...
        Response.AppendHeader("Content-Disposition", String.Format("inline; filename={0}", fileName));
        return File(pdf, "application/pdf");
    }