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

Adding a page load string in footer of ASP.NET masterpage

提问人:Gordon Copestake 提问时间:3/13/2013 更新时间:3/13/2013 访问量:785

问:

我想在我的 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 等,但我希望我的用户可以轻松访问这些信息。

C# asp.net 母版页

评论


答:

3赞 Linus Caldwell 3/13/2013 #1

我会在: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赞 PM. 3/13/2013 #2

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

1赞 Gordon Copestake 3/13/2013 #3

感谢 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>");
}