C# ASP.NET秒表仍在0处

C# ASP.NET秒表仍在0处,c#,asp.net,stopwatch,C#,Asp.net,Stopwatch,因此,作为作业的一部分,我试图使用CSharp粗略计算ASP.NET Web表单项目中审核和完成事务所需的时间 在我的ASPX页面中,我显示购物车中对象的详细信息。 还有一个按钮可以确认结帐并完成结帐 我需要计算的是从页面加载到确认签出的时间 这里有两个事件:page\u load和checkoutton\u click 所以在代码隐藏文件中我是 public partial class CheckoutReview : System.Web.UI.Page { public Stopw

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

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

我需要计算的是从页面加载到确认签出的时间

这里有两个事件:
page\u load
checkoutton\u 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。 但是,如果我将相同的秒表放在
复选框中单击()
秒表可以正常工作


有人能解释一下我在这里做错了什么吗?

每次将页面发布回服务器时,都会创建一个新的类实例
CheckoutReview
。。。因此,您看到的是在post back上创建类和事件处理程序之间的时间

您必须记住,对服务器的每个请求(无论是原始页面请求还是回发)都是对服务器的单独调用。像
Session
ViewState
这样的东西允许您在这些请求之间使用数据

我建议您将当前时间存储在初始加载页面的
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"];
}

明白了,很好用。那么viewstate是指页面被看到的时间,以及页面离开时被销毁的时间?谢谢你提供的信息。我将对此进行研究,因为我在这里只是自己尝试和学习。很好,了解ASP.NET非常重要,了解得越多,就越不可能遇到这些问题。
ViewState
在页面的生命周期内存在,并且作为页面的一部分隐藏在
\u ViewState
隐藏控件中。我认为它比
Session
更安全,因为它只存在于页面中,如果IIS在页面请求之间循环,它不会丢失
ViewState
还保存服务器端控件的所有信息。。。这就是为什么你可以设置
,例如,它仍然会被设置在帖子背面