既存のユーザー コントロールを使用してグリッドの編集フォームを提供するカスタム 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; } }