0

既存のユーザー コントロールを使用してグリッドの編集フォームを提供するカスタム HTTP ハンドラーを作成しています。基本的に、ハンドラーは既存のユーザー コントロールを適切にレンダリングするために必要なページ、フォーム、ヘッダー、およびその他のコントロールを作成し、ProcessRequest の最後で Server.Execute を使用して、動的に作成されたページを実行します。これを行うのは、これが存在するソリューションがユーザー コントロール プロジェクトであり、ページがなく、ページを追加できないためです。これは、複数のプロジェクトで再利用できる必要があります。

これは、この「ページ」に追加されたユーザー コントロールがポストバック メカニズムの使用を必要とするポイントまでうまく機能します。ユーザー コントロールの Page.IsPostBack は常に false であり、コントロール イベント (ボタン クリックなど) は処理されません。典型的な ASP.NET ページの仕組みから、いくつかの重要な部分が抜けていることは明らかです。Page クラスは IHttpHandler の単なる実装ですが、基本的な機能をここで動作させるためには必要ないと思われるコードがたくさんあります。

何か案は?

ベース HTTP ハンドラーの基本的なコードを次に示します。実際のユーザー コントロールをページのフォームに追加するために、この基本ハンドラーから継承する他のクラスがあります。

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

        HtmlGenericControl htmlPage = GetHtml();
        AddTitle();
        htmlPage.Controls.Add(_head);

        HtmlGenericControl htmlBody = GetBody();

        _form.Action = context.Request.Url.ToString();
        _form.Method = "POST";
        htmlBody.Controls.Add(_form);

        htmlPage.Controls.Add(htmlBody);

        AddAjaxManager();
        AddScriptManager();

        _page.Controls.Add(htmlPage);
        //_page.ProcessRequest(context);

        context.Response.CacheControl = "No-Cache";
        context.Server.Execute(_page, context.Response.Output, true);
    }

    public bool IsReusable { get { return false; } }
4

1 に答える 1

0

これを機能させるために、IHttpHandler を実装する代わりに Page を継承しました。ページの HTML 全体を構築する必要はありますが、これを行うと、ASP.NET WebForms ページのライフサイクルのすべての素晴らしさ (またはそうでないこと) を得ることができます。

于 2009-07-22T18:51:21.267 に答える