我目前正在尝试为页面找到一种方法,将页面上用户选择的信息发送给HttpModule。例如,如果用户是否单击了复选框,则模块可以记录该信息以便以后进行错误检查。我的模块可以记录有关页面的简单数据,例如执行时间,但我希望获得更多信息。
这样的事情可能吗?我尝试过使用Context.Items但没有找到任何成功。
答案 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;
}
}