我正在编写一个自定义 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; } }