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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 如风

简述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  如风  阅读(3030)  评论()    收藏  举报

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

       }

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