DNNGO-低头做事,抬头做人!

                    天道酬勤!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net网页程序中的“公共变量”-ViewState

Posted on 2006-03-20 16:29  如风  阅读(3008)  评论(3编辑  收藏  举报


  最近遇到一个问题,在asp.net网页程序中定义了公共变量,却无法得到其被更新过的值,为什么呢?问了很多人,很多人都认为可以使用诸如:公共变量、属性等去解决,一一尝试,无一可以。那么,在asp.net网页程序中,应该如何处理我们桌面程序中的“公共变量”呢?终于,有人告诉我,你可以用:ViewState
  ViewState?通过查阅MSDN,我找到了答案。ViewState 是用于维护页面的 UI 状态的。Web 是没有状态的,ASP.NET 页面也没有状态,它们在到服务器的每个往返过程中被实例化、执行、呈现和处理。作为 Web 开发人员,您可以使用众所周知的技术(如以会话状态将状态存储在服务器上,或将页面回传到自身)来添加状态。

ViewState 的工作原理:

  ViewState 确实没有什么神秘之处,它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 <input type=hidden>)。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。在上面的图 2 中可以看到 ViewState 窗体字段及其回传的值。
  回传后,ASP.NET 页面框架将解析 ViewState 字符串,并为该页面和各个控件填充 ViewState 属性。然后,控件再使用 ViewState 数据将自己重新恢复为以前的状态。

关于 ViewState 还有三个值得注意的小问题:

  如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET 页面框架才能添加隐藏的字段。
  页面本身将 20 字节左右的信息保存在 ViewState 中,用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件。因此,即使该页面或应用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字节。
  在页面不回传的情况下,可以通过省略服务器端的 <form> 标记来去除页面中的 ViewState。

以下是MSDN中以属性方式对ViewState进行封装的代码:

public String Text {
          
get {
              
return (String) ViewState["Text"];
          }

          
set {
              ViewState[
"Text"= value;
          }

       }

使用时,只需在相应的地方给它赋值和使用就可以了。这个问题,搞定!呵呵!