C# ASP.NET秒表仍在0处
因此,作为作业的一部分,我试图使用CSharp粗略计算ASP.NET Web表单项目中审核和完成事务所需的时间 在我的ASPX页面中,我显示购物车中对象的详细信息。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
还有一个按钮可以确认结帐并完成结帐 我需要计算的是从页面加载到确认签出的时间 这里有两个事件:
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
还保存服务器端控件的所有信息。。。这就是为什么你可以设置
,例如,它仍然会被设置在帖子背面