khaleelsyed Ответов: 0

Как вернуть actionresult в ajax post in ASP.NET MVC, который возвращает массив байтов для pdf


Я должен вернуть CustomActionResult из вызова Jquery AJAX POST, который, в свою очередь, возвращает массив байтов.где я хочу показать pdf в новой вкладке, используя возвращаемые данные

Я попробовал сделать следующее

    var params =
    {
          RPT_Id: $('#hdnRM_RPT_ID').val(), RPT_NAME: $('#hdnRM_REPORT_PATH').val(), _params: jsonobject
        , HAS_LOGO: $('#hdnRM_HAS_LOGO').val(), Is_Multiple: $('#hdn_ISMULTIPLE').val(), RPT_PARAMS: jsonMultiReportObject
        , Fetch_SP: $('#hdn_Fetch_SP').attr('data-fetchsp'), rpttype: rpttype
    };


    $.ajax({
    url: "/Reports/ViewCrystalReport",
    type: 'POST',
    async: false,
    contentType: "application/json; charset=utf-8",
        data: JSON.stringify(params),
    cache: false, responseType: 'arraybuffer',
        success: function (data) {

            console.log(data);
        if (data) {
             var file = new Blob([data], { type: 'application/pdf' });
             var fileURL = URL.createObjectURL(file);
             window.open(fileURL);
           //var pdfWin= window.open(data, '');
        }
        else
            globalFunctions.showMessage("error", translatedResources.roleDeleteMsg);
    },
    error: function (data, xhr, status) {
        globalFunctions.onFailure(data, xhr, status); //Error Function
    }
});


мое управляющее действие выглядит следующим образом
[HttpPost]
        public CrystalReportPdfResult ViewCrystalReport(int RPT_Id = 0, string RPT_NAME = "",string _params= "", Boolean HAS_LOGO = false, Boolean Is_Multiple = false,string RPT_PARAMS="",string Fetch_SP="",string rpttype="")
        {

            ReportDocument reportDocument = ProcessCrystalReport( RPT_Id ,  RPT_NAME ,  _params ,  HAS_LOGO ,  Is_Multiple ,  RPT_PARAMS,  Fetch_SP ,  rpttype );
            //var rpttype = Request.QueryString["rpttype"];
            //if (rpttype == "pdf")
            //{
            //    if (!string.IsNullOrEmpty(reportPath)) { return new CrystalReportPdfResult(reportDocument, ExportFormatType.PortableDocFormat); }
            //}
            //else if (rpttype == "excel")
            //{
            //    if (!string.IsNullOrEmpty(reportPath)) { return new CrystalReportPdfResult(reportDocument, ExportFormatType.Excel); }
            //}

            if (!string.IsNullOrEmpty(reportPath))
            {
                return new CrystalReportPdfResult(reportDocument);
            }
            return null;

        }


где
CrystalReportPdfResult
это пользовательский класс actionresult, который считывает и преобразует в массив байтов следующим образом
public CrystalReportPdfResult(ReportDocument rd, ExportFormatType reportType = 0)
        {

            SetDBLogonForReport(rd);
            rd.SetDatabaseLogon(Oasis_User, Oasis_Password, Oasis_Server, Oasis_DB);
            if (reportType == 0)
            {
                _contentBytes = StreamToBytes(rd.ExportToStream(ExportFormatType.PortableDocFormat));
            }
            else
                _contentBytes = StreamToBytes(rd.ExportToStream(reportType));
        }


Я могу видеть pdf-файл в новой вкладке, но без какого-либо содержимого.
Пожалуйста любезно помогите мне в решении проблемы при открытии pdf из ajax call in asp.net mvc..

Спасибо..

Что я уже пробовал:

var file = new Blob([data], { type: 'application/pdf' });
                     var fileURL = URL.createObjectURL(file);
                     window.open(fileURL);
                   //var pdfWin= window.open(data, '');

0 Ответов