2009-12-16 65 views
3

而不是使用会话对象或存储到数据库,我存储的临时变量,我需要坚持自定义ViewState变量。例如,ViewState(“MyField1”)= 1ViewState在UpdatePanel刷新时丢失了?

当用户点击浏览器Rrefresh按钮时,Page.IsPostback返回False并且ViewState消失。

我的问题是。如果用户可以刷新Viewstate,为什么会有人使用它?

我知道Refresh会重新发布上次提交的页面,为什么Page.IsPostback重置为False并且ViewState会被吹走?

火焰我,如果你想创建一个潜在的问题,DUP,但是我在这里读其他的帖子,并且不下沉......

更新到原帖:

我现在认为它与由于点击UpdatePanel内的按钮而执行的回发有关。有人可以帮助解释这一点吗?

回答

4

当客户端刷新其浏览器时,会重新提交客户端(可能是GET or a POST)发出的最后一个完整页面请求。它不会重新提交AJAX请求,例如由更新面板事件触发器(“部分页面回发”)生成的请求。

事实上,Page.IsPostbackfalse当你刷新页面意味着你原来的请求是GET,所以这里的什么可能发生的事情:

1)在最初的请求,客户端没有表单数据发送到服务器 - 因此没有包含视图状态数据的隐藏字段(Understanding ASP.NET View State非常详细,但是如果你想真正理解正在发生的事情,可以进行很好的阅读)。在处理此请求时,ASP.NET可能会将一些视图状态发送回客户端,但原始请求只是一个URL。

2)当用户单击UpdatePanel中的按钮时,它们会触发部分回发,在此期间MyField设置为1. UpdatePanel更改客户端的视图状态以反映新值。

此时,如果用户通过常规方式提交POST请求,例如单击按钮,则视图状态将包含更新后的信息。

如果用户点击“刷新”,他们会重新提交第1步中的原始请求,但没有表单数据,因此也没有视图状态。

+0

查看更新至原文 – ChadD 2009-12-16 17:58:17

+0

根据新的信息更新了我的答案。 – 2009-12-16 18:19:04

1

你在哪里设置ViewState?你在哪里重新读取你的ViewState值?也许oyu在asp.net调用LoadViewState()方法之前检查它的内容。

+0

查看此用户原文的更新 – ChadD 2009-12-16 17:58:56

+0

我在Web Form的Page_Load事件中检查了它 – ChadD 2009-12-17 02:17:28

1

用户点击刷新和使用updatepanel不能很好地协同工作。我认为这就是为什么人们说WebForms在Web编程上提供了一个漏洞的抽象,并且一些正在转向mvc。

如果您对迁移不感兴趣,我会告诉您不要将updatepanel用于太长时间或大型操作,您可以假设用户可能会刷新页面。将其用于诸如dropdown2项目之类的小项目时,在dropdown1的选择更改时会发生更改。

如果你只是依赖视图状态,在一个updatepanel中包含大量的功能将会引起麻烦。

0

你的问题是,“为什么会有人使用它。”

Viewstate派上用场,因为您知道的数据是由后发生的。点击刷新不是回发,而是新的要求。

因此可以说你正在浏览一个数据网格,并且你需要知道关于他们点击了什么的某些数据,在点击事件中你可以将这些数据存储在视图状态并在页面生命周期的其他时间处理它,或后续的帖子。

ViewState的优点是它只是嵌入到HTML中,所以它是所有客户端。在SessionState是服务器端的情况下,如果在会话中存储大量数据,则可以使Web或db服务器更加努力地处理该数据。

希望这会有所帮助。

+0

不,我知道这一切。问题是为什么任何人使用它,如果它在用户刷新时被清除。我对我的问题的更新解释说,由于使用更新面板而被清除,但我寻求解释。不过谢谢,:-) – ChadD 2009-12-17 12:39:52