惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security @ Cisco Blogs
H
Hacker News: Front Page
P
Privacy International News Feed
N
News and Events Feed by Topic
T
Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
K
Kaspersky official blog
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
Security Latest
Security Latest
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
L
Lohrmann on Cybersecurity
Jina AI
Jina AI
P
Proofpoint News Feed
AI
AI
雷峰网
雷峰网
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 叶小钗
Webroot Blog
Webroot Blog
Apple Machine Learning Research
Apple Machine Learning Research
SecWiki News
SecWiki News
罗磊的独立博客
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
S
Security Affairs
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
月光博客
月光博客
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Securelist
W
WeLiveSecurity
T
Troy Hunt's Blog
A
Arctic Wolf
博客园 - 司徒正美

博客园 - 如风

简述DNN版本升级机制及升级失败后的处理 DNN4.5新特性:个性化客户端 DNN重要变革:性能、易用、友好一个都不能少 DNN模块使用指南之News Feeds (RSS) 模块 DNN新闻管理模块使用指南(版本:1.01.03) DNN皮肤制作-谁动了我的密码? DNN3.3/4.3升级可能出现的问题及解决方法 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2) 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(1) DNN 3.3/4.3 英文版本终于发布了! DNN配置之邮箱设置 DNN技巧之IP访问DNN DNN模块之自助生成web.config DNN皮肤制作不完全指南 DNN皮肤生成机制剖析 DNN皮肤应用与制作常见问题 DNN完全配置之“主机设置” GridView 控件使用不完全指南!(续一) GridView 控件使用不完全指南!
asp.net网页程序中的“公共变量”-ViewState
如风 · 2006-03-20 · via 博客园 - 如风

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

  最近遇到一个问题,在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;
          }

       }

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