1

ハンドラーからコントロールの HTML 出力を返したい。私のコードは次のようになります。

システムを使用して; System.IO の使用; System.Web の使用; System.Web.UI を使用します。System.Web.UI.WebControls を使用します。

public class PopupCalendar : IHttpHandler {

public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";

    System.Web.UI.Page page = new System.Web.UI.Page();
    UserControl ctrl = (UserControl)page.LoadControl("~/Controls/CalendarMonthView.ascx");
    page.Form.Controls.Add(ctrl);

    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter tw = new HtmlTextWriter(stringWriter);
    ctrl.RenderControl(tw);
    context.Response.Write(stringWriter.ToString());
}

public bool IsReusable {
    get {
        return false;
    }
}

}

エラーが発生します:

「/CMS」アプリケーションでサーバー エラーが発生しました。オブジェクト参照がオブジェクト インスタンスに設定されていません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

ソース エラー:

14 行目: System.Web.UI.Page ページ = new System.Web.UI.Page(); 15 行目: UserControl ctrl = (UserControl)page.LoadControl("~/Controls/CalendarMonthView.ascx"); 16 行目: page.Form.Controls.Add(ctrl); 17 行目:
18 行目: StringWriter stringWriter = new StringWriter();

ハンドラーを介して Usercontrol の出力を返すにはどうすればよいですか?

4

3 に答える 3

2

BuildManager.GetCompiledTypeメソッドを使用して、目的のコンテンツを含む既存のページをロードし、インターフェイス実装を使用していくつかのパブリックプロパティを設定し、httphanderにキャストされたそのprocessrequestを呼び出します。このようにして、aspxページを直接公開せず、同じashxリソースからさまざまなパラメーターに対して異なるページを決定できます。asp.netページの利点とパワーを維持することも重要です。

于 2012-04-18T11:37:21.763 に答える
1

これを試すことができます:

System.Web.UI.Page page = new System.Web.UI.Page();
UserControl ctrl = (UserControl)page.LoadControl("~/Controls/CalendarMonthView.ascx");
page.Form.Controls.Add(ctrl);

ctrl.DoSomething();

context.Response.CacheControl = "No-Cache";
context.Server.Execute(page, context.Response.Output, true);
于 2014-02-11T06:28:07.947 に答える
0

newそのようなページ クラスのインスタンスを作成して、適切に機能させることはできません。GetCompiledPageInstanceを呼び出して作成する必要があると確信しています(ここでの議論に基づく)。

于 2010-06-09T00:04:22.450 に答える