【问题标题】:How to use ReportViewer 2010 in MVC.NET 2如何在 MVC.NET 2 中使用 ReportViewer 2010
【发布时间】:2010-08-26 16:16:40
【问题描述】:

基本上我想知道如何将报表嵌入到 MVC.Net 2 中。

【问题讨论】:

    标签: asp.net-mvc-2 reportviewer ssrs-2008


    【解决方案1】:

    我做了这个问题,因为网络上没有足够的信息,或者信息不完整,所以你可以开始工作。

    首先你必须知道报表查看器是一个 web 控件,所以你不能在 MVC 上使用它,所以你要做的第一件事就是创建一个 web 表单,这样你就可以添加报表查看器了。在我完成的示例中,我使用的是 Visual Studio 2010。

    网络表单如下所示:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Report Viewer</title>
    </head>
    <body>
        <div style="width: auto;">
            <form id="form1" runat="server" style="width: 100%; height: 100%;">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <rsweb:ReportViewer ID="rptViewer" runat="server" Width="100%" Height="100%" AsyncRendering="False"
                SizeToReportContent="True">
            </rsweb:ReportViewer>
            </form>
        </div>
    </body>
    </html>
    

    网页表单背后的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            var reportServer = ConfigurationManager.AppSettings["ReportServer"].ToString();
            var reportPath = ConfigurationManager.AppSettings["ReportPath"].ToString();
    
            rptViewer.ServerReport.ReportServerUrl = new Uri(reportServer);
            rptViewer.ShowToolBar = false;
            rptViewer.ServerReport.ReportPath = reportPath + Request.QueryString["ReportName"];
            List<ReportParameter> parameters = new List<ReportParameter>();
            string[] keys = Request.QueryString.AllKeys;
            for (int i = 1; i < Request.QueryString.Count; i++)
            {
                parameters.Add(new ReportParameter(keys[i], Request.QueryString[i]));
            }
            this.ReportViewer1.ServerReport.SetParameters(parameters);
            this.ReportViewer1.ProcessingMode = ProcessingMode.Remote;
            this.ReportViewer1.ShowParameterPrompts = false;
            this.ReportViewer1.ShowPromptAreaButton = false;
            this.ReportViewer1.ServerReport.Refresh();
    
            rptViewer.ProcessingMode = ProcessingMode.Remote;
            rptViewer.ServerReport.Refresh();
        }
    }
    

    现在我们需要使用 MVC。我们有两个选择,一个是打开一个带有 javascript 弹出窗口的新窗口,或者使用 iframe。

    我会同时做这两件事,这样你就可以对视图有一个最好的想法:

    <iframe id="Frame1" src="<%= Session["Url"] %>" width="230" height="230" frameborder="0"></iframe> **1
     function OpenReports(name) {
                var width = (screen.availWidth - 700).toString();
                var height = (screen.availHeight - 100).toString();
                window.open('/Reporting/Reports.aspx?ReportName=' + name,
                     'mywindow', 'width=' + width + ',height=' + height + ',toolbar=no,location=no,directories=yes,status=no,' +
                    'menubar=no,scrollbars=yes,copyhistory=yes,resizable=yes' + ',screenX=0,screenY=0,left=0,top=0');
    
            } **2
    

    **1 SessionURL 是一个会话变量,其中包含我们要显示的路径和报告。这也是使用 iframe 嵌入报告的第一种方法

    **2 /Reporting/Reports.aspx 是我们刚刚创建的网络表单的路径。这是第二种方式,打开一个新窗口。

    在控制器中:

     public ActionResult ViewName()
     {
        Session["Url"] = "/Reporting/Reports.aspx?ReportName=Report44";
        return View();
     }**1
    

    **1 /Reporting/Reports.aspx 是我们刚刚创建的网络表单的路径。

    另外,如果您使用的是 Report Viewer 10,请记住 web.config 中的此功能:

    <system.web>
        <httpHandlers>
          <add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </httpHandlers>
    </system.web>
    

    希望本教程对某人有所帮助:)

    【讨论】:

    • 它确实帮助了某人——我。非常感谢。
    • 关于“你必须知道的第一件事是报表查看器是一个 web 控件,所以你不能在 MVC 上使用它”,这作为一个笼统的陈述是不正确的。 You can make web controls work in MVC. 不过,我还没有在报表查看器中尝试过。
    • 这对我帮助很大。谢谢,塞尔吉奥。
    • 非常感谢 - 我们正在使用 iframe,它会导致整个页面在加载报告时刷新,而不是仅仅加载报告 - 知道如何解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多