2009-07-07 13 views
0

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

これは、この「ページ」に追加されたユーザーコントロールがポストバックメカニズムの使用を必要とする時点まで機能します。ユーザーコントロール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; } } 

答えて

0

このようにするには、IHttpHandlerを実装する代わりにPageから継承しました。それでも、ページのHTML全体を構築する必要がありますが、これを実行するとASP.NET WebFormsページのライフサイクルのすばらしさが得られます。

関連する問題