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