вернуть PDF в запрос ajax - PullRequest
       20

вернуть PDF в запрос ajax

9 голосов
/ 28 марта 2012

Я получил запрос ajax на мой сервер, где я создаю файл PDF.Теперь я хочу отобразить этот файл в новом окне / вкладке или просто загрузить его.как я могу это сделать?

мой запрос

$.ajax({
    url: '/Document/CreatePDF',
    type: 'POST',
    data: {
        docid: documentId,
        dataId: array
    },
    traditional: true,
    success: function (data) {
    }
});

    [HttpPost]
    public FileStreamResult CreatePDF(long docid, List<long> dataId)
    {
        var document = _rep.LoadDocument(docid.ToString(), Server.MapPath("~/Documents/") + docid + ".xml");

        var exporter = new PDFExporter(document);

        MemoryStream fileStream = exporter.CreatePDF();
        byte[] PdfByte = fileStream.GetBuffer();
        fileStream.Flush();
        fileStream.Close();

        HttpContext.Response.AddHeader("content-disposition","attachment; filename=form.pdf");

        return new FileStreamResult(fileStream, "application/pdf");
    }

1 Ответ

12 голосов
/ 28 марта 2012

Вы не можете использовать AJAX для загрузки файлов. Причина этого в том, что javascript не позволяет вам сохранять загруженный контент на клиентском компьютере или запрашивать диалог «Сохранить как». Вы должны использовать простой HTML <form> или якорь:

@using (Html.BeginForm("CreatePDF", "Document", FormMethod.Post, new { id = "myform" }))
{
    <button type="submit">Download</button>
}

Если вам необходимо передать аргументы этому действию контроллера, которые известны только клиенту, вы можете подписаться на событие .submit этой формы, а затем динамически внедрить в него скрытые поля с соответствующими значениями, а затем оставить действие по умолчанию. выполнить. И если значения известны на стороне сервера, вы должны просто использовать HTML-помощники для генерации этих скрытых полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...