【问题标题】:How do I get a custom IHttpHandler to Be Capable of Handling Postbacks?如何让自定义 IHttpHandler 能够处理回发?
【发布时间】:2009-07-07 16:35:34
【问题描述】:

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

【问题讨论】:

    标签: asp.net postback user-controls ihttphandler


    【解决方案1】:

    为了完成这项工作,我从 Page 继承而不是实现 IHttpHandler。您仍然需要构建页面的整个 HTML,但是当您这样做时,您将获得 ASP.NET WebForms 页面生命周期的所有精彩(或没有)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2013-03-19
      • 2015-02-09
      相关资源
      最近更新 更多