web-dev-qa-db-ja.com

ScriptManagerを必要とするMicrosoftReportViewerWebコントロール

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にScriptManagerが必要であると文句を言いますが、p.RenderControl(myWriter)行で次の例外をスローします。

レポートビューア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 */}
    }
}

どんな助けでも大歓迎です。これは.NET4で実行され、ReportViewer2010を使用しています。

12
Maya

私の場合は指示を入れるだけです

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

aspxフォームソースモードで動作します!!

7
Jorge olivares

エラーは、レンダリングの実行中にフォームタグが欠落しているように見えます。 ScriptManagerは、タスクを実行するためにrunatサーバーを備えたフォームタグを必要とします。

すべてのコントロールをページのFormプロパティに追加することをお勧めします。 InSequenceとScriptManagerを最初のコントロールにする必要があります。

これがお役に立てば幸いです。

2
Amit Bagga