1

我目前正在尝试找到一种方法,让页面将有关页面上用户选择的信息发送到 HttpModule。例如,如果用户单击或未单击复选框,则模块可以记录该信息以供以后检查错误。我的模块可以记录有关页面的简单数据,例如执行时间,但我希望获得更多信息。

这样的事情可能吗?我曾尝试使用 Context.Items 但没有发现任何成功。

4

1 回答 1

0

您可能在设置 Context.Items 项之前运行的 IHttpModule 中使用了错误事件。尝试在页面已处理的事件 EndRequest 中执行此操作。

在页面中:

protected void Unnamed_Click(object sender, EventArgs e)
{
   Context.Items["button_clicked"] = "yes";
}

在 HttpModule 中:

public class DefaultHttpApplicationModule
    : System.Web.IHttpModule
{
   public virtual void Init(HttpApplication context)
    {
        context.EndRequest += context_EndRequest;
    }


    void context_EndRequest(object sender, EventArgs e)
    {
        var app = ((HttpApplication)sender);
        var ctx = app.Context;
        string clicked = ctx.Items["button_clicked"] as string;
    }
}

也可以直接访问Page实例,因为System.Web.UI.Page也是IHttpHandler。有两个事件 HttpApplication.PreRequestHandlerExecute(在 Page 事件触发之前)和 HttpApplicatoin.PostRequestHandlerExecute(它在 Page.Unload 之后运行)。

    void context_PostRequestHandlerExecute(object sender, EventArgs e)
    {
        var app = ((HttpApplication)sender);
        var ctx = app.Context;

        if (app.Context.Handler != null && app.Context.Handler is Page)
        { // Register PreRender handler only on aspx pages.
            Page page = (Page)HttpContext.Current.Handler;
        }
    }
于 2013-06-06T19:12:42.070 回答