在一个ASP页面中有两个按钮,点击第一个按钮时获取一下当前系统时间,同时使第二个按钮有效。点击第二个按钮时再次获取系统时间并计算两次点击的差值。
问题来了,我在这个页面的.cs文件中设置了两个字段值
DataTime start;
DataTime end;
在两个按钮的消息处理函数中这样写
protected void Button1_Click(object sender, EventArgs e) { start = DataTime.Now; } protected void Button2_Click(object sender, EventArgs e) { end = DataTime.Now; int h = end.Hour - start.Hour; Label1.Text = h.ToString(); }
但是很奇怪的是Lable1的内容永远是第二次点击按钮的当前时刻的小时,Debug发现执行Button2_Click函数时start的数值竟然等于"0001/1/1 0:00:00"!这到底是怎么回事?求高人相助!
给你解释一下你的代码:
DataTime start;
DataTime end;
protected void Button1_Click(object sender, EventArgs e) { start = DataTime.Now; } protected void Button2_Click(object sender, EventArgs e) { end = DataTime.Now; int h = end.Hour - start.Hour; Label1.Text = h.ToString(); }
第一次点击的时候,你的start附上了值,
end=datetime.min;
当你第二次点击的时候;
end=now;
start确实datetime.min 这次因为你第2次是当前页面的一个新的对象,跟你第一次的对象完全不同
所以导致了不是你想要的效果
嗯,道理懂了。那怎么解决能提示下吗?不胜感激!
把变量设为static似乎能得到想要的结果了,但是这样做是否从原理上是正确的呢?
@飞鸟_Asuka: 你可以用一个hidden控件来存放start,或者用session,viewstate
@chenping2008: 用Hidden控件能解决问题。非常感谢!分数给你了
类成员 的生命周期没弄明白
DataTime start;
DataTime end;
原因:当你点击第二个按钮时,start的值在触发事件中已经改变。
解决:把他们都设置成静态的,试试结果怎么样?