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

Posted

技术标签:

【中文标题】MVCReportViewer :报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager【英文标题】:MVCReportViewer : The Report Viewer Web Control requires a System.Web.UI.ScriptManager on the web form 【发布时间】:2017-07-31 03:29:00 【问题描述】:

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

我正在使用来自代码 plex 的 MVC 报告查看器 MVC Report Viewer

最初我使用 rdl 文件作为服务器报告,它托管在报告服务器上。我能够加载报告。

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

我做了如下代码更改以将其加载为本地报告。

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

var dataSet = this.FillDataSet(reportModel.ReportParameters);
reportViewer.LocalReport.ReportPath = string.Format(@"0Reports\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();

网上找了一些帮助,大部分都建议添加scripts标签如下

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

如果有人可以帮助我,那就太好了。

【问题讨论】:

我建议您显示来自ReportViewerWebForm.aspx(与ReportViewerForMvc 捆绑在一起)的ASPX 页面内容,其中ReportViewer 控制发生。 ReportViewer实例是代码动态生成的吗? @TetsuyaYamamoto 嗨,我已经用 ReportViewerWebForm.aspx 的内容更新了问题 似乎 ASPX 页面内容很好,因此它可能会变成 ReportViewerWebForm.aspx.cs 内部的代码隐藏问题。您是否包含IsPostBack 检查Page_Load 方法? @TetsuyaYamamoto 它实际上是在 MVC 应用程序中使用的 MVC 报告查看器。文件后面没有代码。我共享的 C# 代码位于一个控制器中,该控制器在视图包中返回报表查看器 【参考方案1】:

经过几天的尝试和尝试,发现以下行本身就是一个问题。

reportViewer.DataBind();

删除了这条线,一切都开始正常了。看来,报表查看器在内部处理数据绑定。无需显式绑定。

【讨论】:

以上是关于MVCReportViewer :报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager的主要内容,如果未能解决你的问题,请参考以下文章

制作多页报表:水晶报表查看器只生成第一页(C#)

从报表查看器导出时更改 PDF 上的报表名称

水晶报表查看器中未显示图像

报表查看器无法访问其他数据库服务器中的报表

s-s-rS 报表查看器无法将凭据从超链接传递到报表服务器

如何在报表查看器中添加参数?