在ASP.NET母版页的页脚中添加页面加载字符串

时间:2013-03-13 11:10:47

标签: c# asp.net master-pages

我想在我的ASP.NET应用程序的页脚中添加一个标签,向我的用户显示每个页面加载的时间。在我目前拥有的site.master页面中:

public partial class SiteMaster : MasterPage
   {
    public Stopwatch pageLoadTime = new Stopwatch();

    protected void Page_Load(object sender, EventArgs e)
    {
        pageLoadTime.Start();

        //Other stuff here

        pageLoadTime.Stop();
        TimeSpan ts = pageLoadTime.Elapsed;

        // Format and display the TimeSpan value. 
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);

        PageLoadTimeLabel.Text = "Page loaded in " + elapsedTime;
    }

但这并没有给我一个“真正的”页面加载时间,即使页面需要5秒钟加载它返回0.1秒。所以我将结束代码移到Page_LoadComplete部分,但这似乎无法更新标签。

任何指针?我知道我可以使用firebug等,但我希望我的用户可以轻松访问这些信息。

3 个答案:

答案 0 :(得分:3)

我会在global.asax

中执行此操作
private DateTime start_time

protected void Application_BeginRequest(object sender, EventArgs e)
{
    start_time = DateTime.Now;
}
protected void Application_EndRequest(object sender, EventArgs e)
{
    var duration = DateTime.Now - start_time;
    Response.Write("...");
}

或者将其写入会话并在母版页中阅读。

答案 1 :(得分:1)

感谢Linus我已经创建了这个我想要的东西:

    protected void Application_BeginRequest(Object sender, EventArgs e)
{
    Context.Items["loadstarttime"] = DateTime.Now;
}

然后

public void Application_EndRequest(object src, EventArgs e)
{
    DateTime end = (DateTime)Context.Items["loadstarttime"];
    TimeSpan ts = DateTime.Now - end;

    // Format and display the TimeSpan value. 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);

    Response.Write("<div style='text-align: center' class='thesmallprint'>Page loaded in: " + elapsedTime + "</div>");
}

答案 2 :(得分:-1)

Page.LoadComplete可以帮到你。如果您在Page_Load事件处理程序中启动计时器并在LoadComplete事件处理程序中将其停止,那么您可能会获得实际时间。