0

需要将报告与MVC应用程序集成。MVCReportViewer:报告查看器Web控件需要Web窗体上的System.Web.UI.ScriptManager

我使用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(@"{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包获取的已具有脚本标记。

但尽管如此,它抛出异常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> 

将是巨大的,如果有人可以帮助我在此。

+0

我建议你从'ReportViewer'控件发生的'ReportViewerWebForm.aspx'(与ReportViewerForMvc捆绑在一起)显示ASPX页面内容。 ReportViewer实例是否由代码动态生成? –

+0

@TetsuyaYamamoto嗨,我已经更新了ReportViewerWebForm.aspx –

+0

的内容的问题似乎ASPX页面内容是很好的atm,因此它可能会变成“ReportViewerWebForm.aspx.cs”内的代码隐藏问题。你是否在'Page_Load'方法中包含'IsPostBack'检查? –

回答

0

经过几天的打击和审判后发现下面一行本身就是一个问题。

reportViewer.DataBind(); 

删除线和事情开始工作正常。看来,报表查看器在内部处理数据绑定。不需要明确地绑定它。