Microsoft ReportViewer Web控件需要ScriptManager

我正在尝试以编程方式在IHttpHandler上下文中的自定义页面内呈现报表查看器

ReportViewer rv = new ReportViewer(); ReportDataSource rds = new ReportDataSource(); rds.Name = "Report"; rv.LocalReport.ReportPath = "Report.rdlc"; rds.Value = SomeReportObject; rv.LocalReport.DataSources.Add(rds); rv.LocalReport.Refresh(); ScriptManager scriptHandler = new ScriptManager(); MyPage p = new MyPage(); p.Controls.Add(scriptHandler); p.Controls.Add(rv); using (TextWriter myTextWriter = new StringWriter()) { using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter)) { p.RenderControl(myWriter); } } 

虽然我已将ScriptManager添加到页面但运行时抱怨ReportViewer需要一个,但它会在p.RenderControl(myWriter)行引发以下exception

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

这是MyPage类

 public class MyPage : Page { public override void VerifyRenderingInServerForm(Control control) { //Empty Method } public override bool EnableEventValidation { get { return false; } set { /* Do nothing */} } } 

任何帮助将非常感激。 这是在.NET 4上完成的,我正在使用ReportViewer 2010。

在我的情况下,只需把指令

 <%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>   

在aspx表单源模式下工作!!

执行渲染时,错误看起来像表单标记丢失。 ScriptManager需要带有runat服务器的表单标签来执行任务。

我建议你将所有控件添加到Page的Form属性中。 在Sequence和ScriptManager中应该是第一个控件。

我希望这有帮助。