MVCReportViewer:报表查看器Web控件需要Web表单上的System.Web.UI.ScriptManager

时间:2017-03-09 23:13:53

标签: c# asp.net reporting-services reportviewer reportviewerformvc

需要将报告与MVC应用程序集成。

我正在使用代码plex中的MVC Report查看器 MVC Report Viewer

最初我使用rdl文件作为Server Report,它是在Reports Server上托管的。我能够加载报告。

但要求不是将其作为服务器报告托管,而是将rdl文件添加为本地报告并在运行时加载它。

我按如下方式更改了代码,将其加载为本地报告。

ReportViewer reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;

var dataSet = this.FillDataSet(reportModel.ReportParameters);
reportViewer.LocalReport.ReportPath = string.Format(@"{0}Reports\{1}.rdlc", this.Request.MapPath(this.Request.ApplicationPath), reportModel.ReportName);
reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("DS_Report", dataSet.Tables[0]));
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("DS_ChartforSalesRep", dataSet.Tables[0]));

reportViewer.ShowParameterPrompts = false;

reportViewer.DataBind();
reportViewer.LocalReport.Refresh();
reportViewer.ReportError += this.OnLoadReportError;

this.ViewBag.ReportViewer = reportViewer;

将数据加载并填充到数据集中,然后将其提供给报告。

我在这一行得到例外

reportViewer.DataBind();

试图在网上找到一些帮助,其中大多数建议添加脚本标签,如下所示

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

很少有链接 - Link 1 - Link 2 - Link 3

从nuget包添加的ReportViewerWebForm.aspx已经有了脚本标记。

但是,它仍会引发异常The Report Viewer Web Control requires a System.Web.UI.ScriptManager on the web form

编辑1:ReportViewerWebForm.aspx的内容

    <%@ Page Language="C#" AutoEventWireup="True" CodeBehind="ReportViewerWebForm.aspx.cs" Inherits="ReportViewerForMvc.ReportViewerWebForm" %>

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body style="margin: 0px; padding: 0px;">
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Scripts>
                    <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" />
                </Scripts>
            </asp:ScriptManager>
            <rsweb:ReportViewer ID="ReportViewer1" runat="server"></rsweb:ReportViewer>
        </div>
    </form>
</body>
</html>

如果有人可以帮助我,那会很棒。

1 个答案:

答案 0 :(得分:0)

经过几天的打击和试验后发现以下行本身就是一个问题。

reportViewer.DataBind();

删除了该行,事情开始正常。看来,报表查看器内部处理数据绑定。无需明确绑定它。