FileContentResult не генерирует файл при вызове из записи AJAX - PullRequest
0 голосов
/ 26 января 2019

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

    public FileContentResult ConvertToPDF(int reportTypeId, string cultureName, int headerFooterTemplateId, int baseClassId, string baseTypeName)
    {
        try
        {
            string resourcePath = @"C:\TFS\Products\EnGenero\Trunk\EnGenero Application\RiskNetResources\bin\Debug\RiskNetResources.dll"; // --<<-- Reference this

            byte[] result = new DocumentWriter().ConvertDocumentToPDFSharp(GetSeedData(reportTypeId, cultureName, resourcePath, headerFooterTemplateId, baseClassId));

            return new FileContentResult(result, "application/pdf")
            {
                FileDownloadName = "MyReportFile.pdf"
            };
        }
        catch (Exception ex)
        {
            Logger.Instance.LogError("Error in ConvertToPDF", ex);
            return new FileContentResult(GetBytes("Error fetching pdf, " + ex.Message + Environment.NewLine + ex.StackTrace), "text/plain");
        }
    }

Во время разработки это работало нормально, и при нажатии на указанный выше код PDF отлично загружается через браузер.Во время разработки я вызывал этот метод контроллера непосредственно из диалогового окна JQuery с жестко закодированными параметрами.

Однако я продолжил разработку приложения и теперь вызываю этот метод действия через Ajax Post в частичном представлении.

function CreateDocumentPDF() {

    var baseClassId = @Html.Raw(Json.Encode(ViewData["baseClassId"]));
    var baseTypeName = @Html.Raw(Json.Encode(ViewData["baseTypeName"]));
    var reportTypeId = $j('#ddlReportType option:selected').attr('Value');
    var branchId = $j('#ddlBranch option:selected').attr('Value');
    var languageId = $j('#ddlLanguage option:selected').attr('Value');

    $j.ajax({
        url: appRoot + 'DocumentPDFPrinter/ConvertToPDF',
        type: 'post',
        data: { 'reportTypeId': reportTypeId, 'cultureName': languageId, 'headerFooterTemplateId': branchId, 'baseClassId': baseClassId, 'baseTypeName': baseTypeName },
        success: function (data) {
            closeDefaultPopup();
        },
        failure: function () {
            alert("Error Generating PDF.");
        }
    });
}

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

Я могу только представить, что это как-то связано с Ajaxпост, так как это единственная разница между тем, что он работает нормально или нет, из того, что я вижу.

Это ответ, который я получаю - насколько хорошо я вижу, все в порядке ...?Я что-то пропустил?enter image description here

1 Ответ

0 голосов
/ 27 января 2019

Так что я просто отошел от вызова AJAX и вместо этого сейчас звоню:

    window.location = appRoot + "DocumentPDFPrinter/ConvertToPDF?reportTypeId=" + reportTypeId + "&cultureName=" + languageId etc...

, что, похоже, прекрасно справляется с работой.

...