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

时间:2014-09-10 08:23:31

标签: c# asp.net-mvc asp.net-mvc-5 report

所以我正在对此进行一些研究,从我可以收集的信息来看,过去已经淘汰的技术已被逐步淘汰。

我有一个RDLC文件。我试图使用LocalReport类,但看起来该视图严重不喜欢接收渲染的报告。我正在使用MVC5。

是否有人能够推荐我可以看到的东西作为使用LocalReport类或RDLC文件的替代方法。或者任何人都能够提供有关如何正确执行此操作的一些见解。

如果您想查看我正在使用的一些代码,请与我们联系。

谢谢:)

1 个答案:

答案 0 :(得分:0)

好吧,我成功解决了这个问题:

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

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,而对于其他浏览器,我使用了对象

<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/