ASP.NET秒表保持在0

时间:2014-04-03 15:37:54

标签: c# asp.net stopwatch

因此,作为作业的一部分,我试图粗略计算使用CSharp在ASP.NET Web Forms项目中审查和完成事务所需的时间。

在我的ASPX页面中,我将显示购物车中对象的详细信息 并且有一个按钮确认结帐并完成它。

我需要计算的是自页面加载以来的时间,直到确认结帐。

此处有两个事件:page_loadcheckoutbutton_click

所以在代码隐藏文件中我是

public partial class CheckoutReview : System.Web.UI.Page
{
    public Stopwatch sw = new Stopwatch();

    protected void Page_Load(object sender, EventArgs e)
    {
        sw.Start();
        //... code
    }

    protected void checkoutbutton_click(object sender, EventArgs e)
    {
       //...code
       sw.Stop();
       // in the database i am then storing the elapsedMilliSeconds of the stopwatch
    }

然而问题是,使用此代码,经过的时间始终为0。 如果我在checkoutbutton_click()中放置相同的秒表,stopwatch可以正常工作。

有人可以在这里解释我的错误吗?

1 个答案:

答案 0 :(得分:1)

每次将页面发回服务器时,都会创建类CheckoutReview的新实例...所以您看到的是创建类之间的时间回发后和事件处理程序。

您必须记住,对服务器的每个请求(无论是原始页面请求还是回发)都是对服务器的单独调用。存在SessionViewState之类的内容,允许您在这些请求之间使用数据。

我建议您将当前时间存储在初始加载页面的ViewState上,然后检查事件处理程序中的TimeSpan差异...

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    // Only store on first visit to the page
    ViewState["pageLoadTime"] = DateTime.Now;
  }
}

protected void checkoutbutton_click(object sender, EventArgs e)
{
  TimeSpan diff = DateTime.Now - (DateTime)ViewState["pageLoadTime"];
}