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(); 

刪除線和事情開始工作正常。看來,報表查看器在內部處理數據綁定。不需要明確地綁定它。