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

时间:2011-04-17 15:31:34

标签: asp.net-mvc-2 asp.net-ajax file content-type

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

代码 - bytestream = fs.ToArray();                 fs.Close();                 Response.AppendHeader(“Content-Disposition”,String.Format(“inline; filename = {0}”,fileName));                 return File(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?

1 个答案:

答案 0 :(得分:0)

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

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

你可以这样使用AJAXify(使用jQuery):

$(function() {
    $('#displayPdf').click(function() {
        $('#Document').html(
            $('<iframe/>', {
                src: this.href,
                width: '300px',
                height: '150px'
            })
        );
        return false;
    });
});

假设您的控制器操作可通过GET请求访问:

public ActionResult GetDocumentPage(string id)
{
    byte[] pdf = ...
    Response.AppendHeader("Content-Disposition", String.Format("inline; filename={0}", fileName));
    return File(pdf, "application/pdf");
}