回收TextBox值的内容? ViewState还是回发数据?

时间:2009-12-03 15:32:36

标签: postback viewstate

在我阅读ViewState的一篇文章中,我看到一句话说我不应该误认为TextBox的值存储在ViewState中;它存储在PostBack数据中。

从这里我理解的是,当我回发一个Web表单时,输入控件值存储在HTTP Request主体中。不在Viewstate中。但据我所知,无论如何,ViewState值都存储在一个名为__VIEWSTATE的隐藏字段中。

那是否意味着__VIEVSTATE值未作为回发数据发布在HTTP POST Request正文中?对我来说听起来很无聊。

换句话说,基本上如果我说这样的scenerio的ViewState机制就像这样,我看到它是正确的还是跳过某些东西:

  1. 您在空文本框中输入值并提交页面

  2. 文本框的值将在POST HTTP Request正文中回发。此时__VIEWSTATE中没有任何内容来自TextBox

  3. 在服务器端,使用页面的OnInit方法的默认值创建TextBox

  4. ViewState的TrackChange属性设置为true。

  5. 加载TextBox的回发数据。因为它与TextBox的defalut值不同(因为用户输入了某些内容),所以此文本框的ViewState被标记为DIRTY。

  6. 文本框的新值写入__VIEWSTATE隐藏字段

  7. 从现在起__VIEWSTATE hiddenfeild包含TextBox的最后一个给定值

  8. 该页面将发送到具有__VIEWSTATE隐藏字段的用户浏览器。但这次包含用户输入的最后一个值,该值将准备好呈现

  9. 谢谢你们!

    burak ozdogan

1 个答案:

答案 0 :(得分:0)

ViewState是页面上的隐藏输入,允许服务器跨同一页面的多个请求维护状态。 ViewState由服务器维护,因此除非服务器更改它,否则它将保持不变。 ViewState只是服务器与自己交谈的一种方式。

在您的示例中,您想知道为什么第一次在TextBox中放置值时,ViewState中似乎没有任何内容。原因是服务器还没有放任何东西。当TextBox的值第一次到达服务器时,服务器会将值放在ViewState中,以便它可以在所有后续请求中跟踪它。

在后续请求中,TextBox值将被编码到ViewState中,并作为POST数据发送回服务器。