Как вернуть 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, '');