Различия между window.location = MVC File () и успехом $ .ajax (window.location = result)? - PullRequest
0 голосов
/ 09 марта 2012

На мой взгляд, эти два бита кода должны работать одинаково:

window.location = "../PlanView/ExportAsPDF";

$.ajax({
    url: '../PlanView/ExportAsPDF',
    data: { },
    success: function (stream) { window.location = stream; }
});

Прежний бит кода запускает загрузку файла .PDF для пользователя. Второй - нет - у меня есть странный запрос в сетевом трафике моего браузера.

Может ли кто-нибудь выделить ключевые различия, о которых мне следует знать?

Более подробное объяснение:

Мне нужно передать на сервер больше данных, чем разрешено в URL. Таким образом, мне нужно POST на сервер, а не GET. Я не могу использовать прежний код, потому что не могу вставить столько информации в URL - сервер ответит 414.

Я хотел бы повторить функциональность первого фрагмента кода с последним.

public ActionResult ExportAsPDF(string dataURL)
{
    Document document = new Document(PageSize.A4.Rotate(), 15, 15, 30, 65); 

    byte[] buffer = new byte[0];
    using (MemoryStream memoryStream = new MemoryStream())
    {
        PdfWriter.GetInstance(document, memoryStream);

        document.Open();
        document.Add(new Paragraph("First PDF file"));
        document.Close();
        buffer = memoryStream.ToArray();
    }

    return File(buffer, "application/pdf", "PlanView.pdf");
}

1 Ответ

1 голос
/ 09 марта 2012

Первый отличается от второго, поскольку первый указывает браузеру отображать файл, а второй - нет. Просто потому, что "поток" не будет "../PlanView/ExportAsPDF".

Также нет необходимости в этом запросе ajax, если вы просто хотите направить браузер в файл. И последнее, если оно вообще работает, дало бы вам что - двоичное содержимое файла PDF? Честно говоря, я не знаю, как справиться с этим :)

Вы также должны иметь «dataType», а не «datatype» в ваших атрибутах ajax, если вы ожидаете получить JSON (что, конечно, вы не получите).

UPDATE:

Даже это должно работать:

$.ajax({
url: '../PlanView/ExportAsPDF',
method : 'POST',
data: { },
dataType: 'json',
success: function (stream) { window.location = '../PlanView/ExportAsPDF'; }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...