PDF выбрасывается в консоль браузера, не загружается - PullRequest
0 голосов
/ 31 августа 2018

Я использую Rotativa для создания PDF-файла из представления , который работает хорошо, но теперь в браузере я получаю необработанный файл, выводимый на консоль, без диалогового окна загрузки, без предупреждения, ничего такого. Вот мой код:

Контроллер

public ActionResult DescargarPDF (int itemId) {
        var presupuesto = ReglasNegocio.Fachada.Consultas.ObtenerPresupuesto(itemId);     
        return new Rotativa.PartialViewAsPdf("_PresupuestoFinal", presupuesto) {
            FileName = "Presupuesto_" + itemId + ".pdf",
            PageSize = Rotativa.Options.Size.A4
        };
    }

JQuery скрипт:

$(".convertirPDF").on("click", function (id) {
    var itemId = $(this).data('itemid');
    Pdf(itemId);
});

function Pdf(itemid) {
    var id = itemid;

    $.ajax({
        method: "POST",
        url: 'DescargarPDF',
        data: { itemId: id },
        cache: false,
        async: true,
    });
};

Кнопка на HTML

<button class="convertirPDF btn btn-secondary btn-info" data-itemid="@item.Id">PDF</button>

Я пробовал несколько кодов на контроллере (с одинаковым результатом), так как сценарий и представление работают нормально. Тем не менее, я подозреваю, что html или скрипт нуждаются в некоторой настройке, чтобы сообщить браузеру о необходимости загрузки файла?

Спасибо всем заранее.

1 Ответ

0 голосов
/ 31 августа 2018

Я нашел решение. Это не элегантно, но работает. Поэтому мне не нужно было обязательно использовать ajax для выполнения запроса или для назначения функции кнопке. Я уверен, что проблема связана с JS и / или jQuery. Тем не менее, есть более простой способ сделать это.

Я изменил свою кнопку HTML на:

<a href="DescargarPDF/?itemId=@item.Id" target="_blank" class="btn btn-secondary btn-info">PDF</a>

так что это похоже на кнопку, но это действительно ссылка на метод моего контроллера. Я также удалил скрипт для этой кнопки, и теперь он загружает файл. Не с намеченным именем, но все же.

Спасибо всем. Удачного кодирования.

UPDATE

Я работал над тем же проектом, и мне кажется, я понял, почему мой PDF-файл выбрасывался в консоль.

Дело в том, что jQuery делает запрос, поэтому jQuery управляет ответом. Это просто. Если вы проверите официальные документы для .post(), вы увидите следующее:

В функцию обратного вызова success передаются возвращенные данные, которые будут корневым элементом XML или текстовой строкой в ​​зависимости от типа ответа MIME. Также передается текст статуса ответа.

Начиная с jQuery 1.5, функции обратного вызова также передается объект "jqXHR" (в jQuery 1.4 ему был передан объект XMLHttpRequest).

В большинстве реализаций указывается обработчик успеха.

А я не был, поэтому по умолчанию он просто перетаскивал его на консоль. Я надеюсь, что это проливает некоторый свет на проблему и помогает. Удачного кодирования.

...