与刚接触 ASP.NET 页面的开发人员交谈时,他们通常向我提出的第一个问题就是:“那个 ViewState 到底是什么?”他们的语气中流露出的那种感觉,就象我来到一家异国情调的餐馆,侍者端上一道我从未见过的菜肴时的那种感觉 - 既疑惑不解,又充满好奇。但肯定有人认为它不错,否则就不会提供了。所以,我会先尝一尝,或许会喜欢上它,尽管它看上去的确很古怪! 字串8
对于 ViewState 也是如此,但是如果适应了它的风格,您会发现在许多情况下,您将乐于在自己的 ASP.NET 应用程序中使用 ViewState,因为它可以帮助您使用更少的代码完成更多的工作。但是,有时也会对 ViewState 完全弃之不用。下面我们就这两种情况分别进行阐述,不过,让我们先回答什么是 ViewState 这个问题。 字串6
答案:ViewState 用于维护页面的 UI 状态
Web 是没有状态的,ASP.NET 页面也没有状态,它们在到服务器的每个往返过程中被实例化、执行、呈现和处理。作为 Web 开发人员,您可以使用众所周知的技术(如以会话状态将状态存储在服务器上,或将页面回传到自身)来添加状态。下面我们以图 1 中的注册窗体为例进行论述。 字串9
图 1:恢复回传的窗体值
字串2
从上图中可以看出,我为便餐选择了一个无效的值。此窗体与 Web 上的多数窗体一样友好,它在出现错误的字段旁边显示一条有用的错误消息和一个星号。而且,窗体中还显示了我在其他文本框和下拉列表中输入的所有有效值。这在某种程度上是可能的,因为 HTML 窗体元素会在 HTTP 标头中将其当前值从浏览器发送到服务器。您可以使用 ASP.NET 跟踪来查看回传的窗体值,如图 2 所示。
字串8
图 2:HTTP 窗体中回传的值(通过 ASP.NET 跟踪显示) 字串5
在 ASP.NET 之前,通过多次回传将值恢复到窗体字段中完全是页面开发人员的责任,他们将不得不从 HTTP 窗体中逐个拾取回传值,然后再将其推回字段中。幸运的是,现在 ASP.NET 可以自动完成这项任务,从而为开发人员免除了一项令人厌烦的工作,同时也无需再为窗体编写大量的代码。但这并不是 ViewState。 字串8
ViewState(英文)是一种机制,ASP.NET 使用这种机制来跟踪服务器控件状态值,否则这些值将不作为 HTTP 窗体的一部分而回传。例如,由 Label 控件显示的文本默认情况下就保存在 ViewState 中。作为开发人员,您可以绑定数据,或在首次加载该页面时仅对 Label 编程设置一次,在后续的回传中,该标签文本将自动从 ViewState 中重新填充。因此,除了可以减少繁琐的工作和代码外,ViewState 通常还可以减少数据库的往返次数。 字串1
ViewState 的工作原理
ViewState 确实没有什么神秘之处,它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 <input type=hidden>)。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。在上面的图 2 中可以看到 ViewState 窗体字段及其回传的值。 字串1
回传后,ASP.NET 页面框架将解析 ViewState 字符串,并为该页面和各个控件填充 ViewState 属性。然后,控件再使用 ViewState 数据将自己重新恢复为以前的状态。 字串1
关于 ViewState 还有三个值得注意的小问题。 字串8
如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET 页面框架才能添加隐藏的字段。
页面本身将 20 字节左右的信息保存在 ViewState 中,用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件。因此,即使该页面或应用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字节。
在页面不回传的情况下,可以通过省略服务器端的 <form> 标记来去除页面中的 ViewState。
充分利用 ViewState
ViewState 为跨回传跟踪控件的状态提供了一条神奇的途径,因为它不使用服务器资源、不会超时,并且适用于任何浏览器。如果您要编写控件,那么肯定需要了解如何在控件中维护状态(英文)。
字串4
开发人员在编写页面时同样可以按照几乎相同的方式来利用 ViewState,只是有时页面会包含不由控件存储的 UI 状态值。您可以跟踪 ViewState 中的值,使用的编程语法与会话和高速缓存的语法类似: 字串5
[Visual Basic]
' 保存在 ViewState 中
ViewState("SortOrder") = "DESC" 字串4
' 从 ViewState 中读取
Dim SortOrder As String = CStr(ViewState("SortOrder")) 字串1
[C#]
// 保存在 ViewState 中
ViewState["SortOrder"] = "DESC"; 字串5
// 从 ViewState 中读取
string sortOrder = (string)ViewState["SortOrder"];
分享到:
相关推荐
ASP.NET ViewState 是一种机制,主要用于在Web应用的页面往返行程中保持用户界面(UI)的状态。由于Web的本质是无状态的,每次用户请求页面时,服务器都会创建一个新的页面实例,而ASP.NET页面也不例外。这就意味着...
【标题】"经典中的经典 asp.net网站实例!!!" 指的是一个使用ASP.NET技术构建的网站示例项目,这个项目可能是一个经典的教程或学习资源,特别适合初学者掌握ASP.NET的基础和实践应用。 【描述】提到"vs2005 + access...
ASP.NET ViewState是一个重要的概念,它是ASP.NET框架为了保持页面在客户端和服务器端之间交互时的状态而引入的一种机制。状态管理是Web开发中的一个关键问题,因为HTTP协议本身是无状态的,每次请求都是独立的。...
ViewState是ASP.NET中的一种机制,用于在Web表单的多个Postback之间持久化控件的状态。它是.NET框架为保持Web应用程序状态而设计的关键组件。在ASP.NET Web表单的生命周期中,当用户提交表单时,ViewState数据会被...
这个项目的亮点可能是其美观的界面设计,这可能得益于早期ASP.NET提供的控件和模板,使得开发者可以轻松创建用户友好的网页。 描述中的“很适合.net 平台开发初学者适用,你肯定会喜欢的!!!”强调了这个项目对...
### 理解ASP.NET的ViewState #### 引言 ASP.NET ViewState是ASP.NET网页用于在PostBack(页面提交)之间持久化Web表单状态的一种技术。对于许多ASP.NET开发者而言,ViewState一直是令人困惑的主题之一。无论是创建...
在这个主题中,我们主要关注五个关键知识点:ASP.NET中ViewState的压缩、操作Excel和Word、以及生成验证码,包括汉字验证码和扭曲验证码。 首先,我们来探讨ASP.NET中的ViewState压缩。ViewState是ASP.NET页面状态...
ASP.NET视图状态(ViewState)是ASP.NET框架中一个关键的概念,它用于在页面的多个生命周期之间持久化控件的状态信息。当一个Web应用程序在服务器端处理请求并回发到客户端时,ViewState允许数据在往返行程中保持...
ViewState是ASP.NET框架中一种内置的状态管理机制,用于在页面回发过程中持久化控件的状态。它是一个服务器端的机制,允许Web表单在多个HTTP请求之间保持数据,而无需在客户端存储或重新发送这些数据。`ViewState ...
ASP.NET ViewState 初探.doc ASP.NET Web 方法中的 XmlElement 参数的功能.d ASP.NET 中 Cookie 的基本知识.doc ASP.NET 页面对象模型.doc asp.net200问-专家门诊—ASP.NET开发答疑 ASP.NetWebPage深入探讨....
在ASP.NET中,ViewState是一种关键机制,用于在页面之间持久化控件的状态。当用户与网页交互时,比如填写表单或点击按钮,ViewState会存储这些交互信息,以便在后续的HTTP请求中恢复这些状态。 ViewState的内容是...
ASP.NET视图状态(ViewState)是.NET框架中用于在页面回发过程中保持用户界面状态的一种机制。在Web开发中,由于HTTP协议的无状态性,每次客户端与服务器之间的交互都会导致页面状态丢失,除非采取某种手段来存储和...
下面是一个简单的示例,展示如何在ASP.NET页面中使用ViewState: **VB.NET:** ```vb ' 设置ViewState ViewState("SortOrder") = "DESC" ' 获取ViewState Dim SortOrder As String = CStr(ViewState("SortOrder")) ...
6. **状态管理**:由于HTTP协议无状态,ASP.NET提供了多种状态管理机制,如ViewState、Session、Cookie和Application等,以保持用户在不同请求之间的状态信息。 7. **安全性**:图书销售系统必须考虑安全性问题,如...
- **状态管理**:ASP.NET提供了多种状态管理方式,包括ViewState、Session、Cookies、Application、Cache等。每种方式都有其适用场景和优缺点。 - **安全性**:ASP.NET内置了强大的安全机制,如表单身份验证、...
ASP.NET是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站、 web 应用程序和 web 服务。本压缩包包含的是一个完整的ASP.NET项目源代码集合,提供了十个不同的项目示例,这对于学习和理解ASP.NET的工作...
ASP.NET是微软公司推出的一种基于.NET Framework的Web应用程序开发平台,它为开发者提供了构建动态、数据驱动的Web应用的强大工具和框架。这个压缩包中包含的"8个ASP.NET网站简单例子"是针对初学者或者想要提升ASP...
ViewState是ASP.NET web应用程序中一个重要的概念,它用于在页面之间持久化服务器控件的状态信息。当用户与网页交互时,比如填写表单或者选择下拉框,这些控件的状态通常需要在页面生命周期的不同阶段保持一致。...
ASP.NET 是微软公司推出的一种基于.NET Framework的服务器端编程模型,用于构建动态网站、Web应用程序和Web服务。这个教程将带你深入理解ASP.NET的核心概念和技术,帮助你掌握开发高效、可扩展的Web应用的技能。 在...
在这个ASP.NET 4.0 完整项目(10个)的压缩包中,你将找到一系列基于ASP.NET 4.0和C#的实践项目,这些项目可以帮助你深入理解和掌握ASP.NET的核心概念和技术。 1. **ASP.NET基础**:在这些项目中,你可以看到ASP...