2014-07-18 26 views
-2

我有一个用户控件内的窗体,&从页面调用这个称为index.aspx。 提交表单并单击刷新后,它会再次导致回发。 所以,我试图在视图状态下将数据保存为'1'并且在初始页面加载时将其保留为'0'。页面刷新导致回传 - Asp.net

但是,为什么视图状态通过刷新将其值更改为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

为什么要提交表单然后点击刷新?当然,刷新会重置它所做的一切。 – bowlturner

+0

yup @bowlturner。线索是在名称:) – Beakie

+1

查找“发布/重定向/获取”模式 –

回答

2

在刷新,因为它最初的页面还原(您通过GET请求来到这个页面)。 因此,Viewstate返回到其初始状态,并且对其进行的所有更改都将丢失。这是正常的行为。您期望的行为更像是一个会话,因此您可以尝试使用会话 - 它将在请求之间保持其状态。

看看本作页的生命周期大致的了解.NET:

http://msdn.microsoft.com/en-us/library/vstudio/ms178472%28v=vs.100%29.aspx

这对视图状态的说明:

http://msdn.microsoft.com/en-us/library/ms972976.aspx

两个将是对你非常有帮助! 祝你好运。

-2

使用会话而不是ViewState。

+0

他的问题与缺乏对页面生命周期的理解有关。将值放入Session并不是正确的方法。 – Calvedos

0

为了简单起见,ViewState保存在用户机器内部,而Session保存在服务器机器内部(通过cookie访问)。 只要页面为IsPostBack!IsPostBack ,ViewState将刷新,但会话不会。

在你的情况,我认为你应该使用会话,而不是ViewState。

要了解更多,你可以通过ASP.NET Life Cycle。从基础学习总是很好的