将呈现的报告从控制器发送到视图

本文关键字:视图 控制器 报告 | 更新日期: 2023-09-27 18:21:23

所以我对此进行了一些研究,据我所知,过去用于这方面的技术已经被逐步淘汰。

我有一个RDLC文件。我正在尝试使用LocalReport类,但该视图似乎非常不喜欢接收呈现的报告。我正在使用MVC5。

有人能推荐一些我可以考虑的替代使用LocalReport类或RDLC文件的方法吗。或者有人能提供一些关于如何正确做到这一点的见解吗。

如果你想看看我正在使用的一些代码,请告诉我。

感谢:)

将呈现的报告从控制器发送到视图

好吧,我设法解决了我的问题,如下所示:

我创建了报告并将其保存到一个临时文件夹中,该文件夹每天都会被删除。

System.IO.File.WriteAllBytes(Server.MapPath("/TempReports/report.pdf"), renderedBytes);

我的控制器操作刚刚返回了一个指向渲染报告的链接。

JavaScript:

function GenerateReport() {
        $.ajax({
            type: "POST",
            url: "/Reporting/ReportAction",
            data: { param1: "", param2: "" },
            success: function (data) {
                var ua = window.navigator.userAgent;
                var msie = ua.indexOf("MSIE ");
                if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv':11'./)) {
                    //set of functions specific to IE
                    var success = new PDFObject({ url: data }).embed("reportGenIe");
                    $("#reportGenIe").attr('hidden', false);
                }
                else {
                    //Normal browsers
                    var success = new PDFObject({ url: data }).embed("reportGen");
                }
            },
            error: function () {
                alert("Unable to generate the report.");
            }
        });

对于IE,我使用Iframe,对于其他浏览器,我使用Object

<div role="content" style="padding-bottom:20px; height:650px !important">
    <iframe id="reportGenIe" hidden="hidden"></iframe>
    <object id="reportGen"></object>
</div>

这包括绕过IE拒绝为我动态显示pdf。

我使用了PDFObject-js库,它似乎已经完成了任务。http://pdfobject.com/