ASP.NET 秒表保持在 0

本文关键字:NET ASP | 更新日期: 2023-09-27 17:56:40

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

在我的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工作正常。

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

ASP.NET 秒表保持在 0

每次将页面回发到服务器时,都会创建类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"];
}