有没有办法可以从global.asax Application_EndRequest函数中访问页面对象?
我正在尝试在请求结束时设置标签文本,但访问该页面比我想象的要困难。
这是我目前无法正常工作的内容:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
Context.Items.Add("Request_Start_Time", DateTime.Now);
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]);
System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page;
if (page != null)
{
Label label = page.FindControl("lblProcessingTime") as Label;
if (label != null)
{
label.Text = String.Format("Request Processing Time: {0}", tsDuration.ToString());
}
}
}
页面在这里始终为空。
提前致谢。
答案 0 :(得分:6)
最好只创建一个BasePage类,您的所有页面都应该从该类继承。然后,您可以将代码放在页面的Unload事件中,并且没有问题。
答案 1 :(得分:0)
您无法在Application_Start和Application_End中执行此操作。
来自MSDN:
Application_Start和Application_End方法是不代表HttpApplication事件的特殊方法。 ASP.NET在应用程序域的生命周期内调用它们一次,而不是为每个HttpApplication实例调用它们。
答案 2 :(得分:0)
在请求生命周期的这个阶段,页面已经被渲染,页面对象不再可用。您需要使用较早的事件。
那就是说,我不会推荐这种方法,因为它有很多问题:
您正在使用FindControl。如果控件的名称发生更改,此代码将中断。
此代码将针对任何请求运行,而不仅仅是页面,而不仅仅是您需要运行的特定页面。
此代码应位于母版页或页面基类中,您可以以类型安全的方式访问标签。