页面上的用户交互与HttpModule交互

时间:2013-06-06 14:08:34

标签: c# asp.net

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

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

1 个答案:

答案 0 :(得分:0)

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

在Page:

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(在页面事件触发之前)和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;
        }
    }