我在Usercontrol中有一个表单,&从页面调用这个说index.aspx。 提交表单并单击刷新后,它再次导致回发。 所以,我试图在一个观察状态中保持一面旗帜作为' 1'保存数据后,' 0'当它是初始页面加载时。
但是为什么viewstate会在刷新时将其值更改为0。 如何解决这个问题。
MyForm.ascx.cs
protected void Page_Load(object sender, EventArgs e){
if(!IsPostBack){
ViewState["DataSaved"] = 0;
}
}
protected void btnSubmit_Click(object sender, EventArgs e){
if (Page.IsValid && Convert.ToInt32(ViewState["DataSaved"]) == 0){
//save data;
ViewState["DataSaved"] = 1;
} else{
ViewState["DataSaved"] = 0;
}
}
答案 0 :(得分:2)
在刷新时,页面会像最初一样被还原(您通过GET请求来到此页面)。 因此Viewstate返回到其初始状态,并且对其进行的所有更改都将丢失。这是正常行为。您期望的行为更像是会话,因此您可以尝试使用会话 - 它将在请求之间保持其状态。
请查看此内容,了解.net中的页面生命周期:
http://msdn.microsoft.com/en-us/library/vstudio/ms178472%28v=vs.100%29.aspx
这是对Viewstate的解释:
http://msdn.microsoft.com/en-us/library/ms972976.aspx
两者都对你很有帮助! 祝你好运。
答案 1 :(得分:0)
为简单起见,ViewState正在用户机器内部保存,而Session正在服务器内部保存(通过cookie访问)。
只要页面IsPostBack
或!IsPostBack
,ViewState就会刷新
但是,会话不会。
在你的情况下,我认为你应该使用Session而不是ViewState。
要了解更多信息,您可以浏览ASP.NET Life Cycle。从基本的
学习总是好的答案 2 :(得分:-2)
使用Session而不是ViewState。