6

有什么方法可以从 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());
            }
        }
    }

page 在这里始终为空。

提前致谢。

4

3 回答 3

6

最好只创建一个 BasePage 类,您的所有页面都应从该类继承。然后你可以把代码放在页面的 Unload 事件中,就没有问题了。

于 2009-01-26T17:32:55.393 回答
0

您不能在 Application_Start 和 Application_End 中执行此操作。

来自 MSDN:

Application_Start 和 Application_End 方法是不代表 HttpApplication 事件的特殊方法。ASP.NET 在应用程序域的生命周期内调用它们一次,而不是为每个 HttpApplication 实例调用一次。

http://msdn.microsoft.com/en-us/library/ms178473.aspx

于 2009-01-26T18:22:16.060 回答
0

在请求生命周期的这个阶段,页面已经呈现并且页面对象不再可用。您将需要使用较早的事件。

也就是说,我不会推荐这种方法,因为它存在许多问题:

您正在使用 FindControl。如果控件的名称发生更改,此代码将中断。

此代码将针对任何请求运行,而不仅仅是页面,而不仅仅是您需要运行它的特定页面。

此代码应位于母版页或页面基类中,您可以在其中以类型安全的方式访问标签。

于 2009-01-26T18:37:54.810 回答