【问题标题】:ASP.NET Stopwatch Remaining at 0ASP.NET 秒表保持在 0
【发布时间】:2014-04-03 15:37:54
【问题描述】:

因此,作为作业的一部分,我试图粗略计算在使用 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 工作正常。

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

【问题讨论】:

    标签: c# asp.net stopwatch


    【解决方案1】:

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

    您必须记住,对服务器的每个请求(无论是原始页面请求还是回发)都是对服务器的单独调用。诸如 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"];
    }
    

    【讨论】:

    • 得到它并且工作正常。所以 viewstate 是指页面被看到的时间,当页面离开时被销毁?谢谢提供信息。我会对此进行研究,因为我只是在这里自己尝试和学习。
    • 很好,了解 ASP.NET page life cycle 真的很重要,你越了解它,你就越不可能遇到这些问题。 ViewState 存在于页面的整个生命周期中,并作为页面的一部分隐藏在 __VIEWSTATE 隐藏控件中。我认为它比Session 更安全,因为它只存在于页面中,并且如果 IIS 在页面请求之间回收不会丢失
    • ViewState 还包含服务器端控件的所有信息...这就是为什么您可以设置 <asp:Literal> 的原因,它仍然会在回发时设置
    猜你喜欢
    • 2013-04-13
    • 2019-06-18
    • 1970-01-01
    • 2017-03-13
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多