因此,作为作业的一部分,我试图粗略计算使用CSharp在ASP.NET Web Forms项目中审查和完成事务所需的时间。
在我的ASPX页面中,我将显示购物车中对象的详细信息 并且有一个按钮确认结帐并完成它。
我需要计算的是自页面加载以来的时间,直到确认结帐。
此处有两个事件:page_load
和checkoutbutton_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
可以正常工作。
有人可以在这里解释我的错误吗?
答案 0 :(得分:1)
每次将页面发回服务器时,都会创建类CheckoutReview
的新实例...所以您看到的是创建类之间的时间回发后和事件处理程序。
您必须记住,对服务器的每个请求(无论是原始页面请求还是回发)都是对服务器的单独调用。存在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"];
}