отображать встроенный документ на частичной странице по ссылке ajax.action - PullRequest
0 голосов
/ 17 апреля 2011

Я звоню по ссылке ajax.action на странице. Это отобразит название документа. Пока я щелкаю по документу, на контроллер запускается ajax-запрос, который возвращает результат содержимого файла, и я хочу, чтобы этот файл отображался в браузере как встроенный под div targetID.

Код - bytestream = fs.ToArray (); fs.Close (); Response.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?

1 Ответ

0 голосов
/ 17 апреля 2011

Вы не можете использовать 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");
}
...