知识大全 ASP.NET ViewState 初探 (1)

Posted

篇首语:出门莫恨无人随,书中车马多如簇。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET ViewState 初探 (1)相关的知识,希望对你有一定的参考价值。

ASP.NET ViewState 初探 (1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    与刚接触 ASP NET 页面的开发人员交谈时 他们通常向我提出的第一个问题就是 那个 ViewState 到底是什么? 他们的语气中流露出的那种感觉 就象我来到一家异国情调的餐馆 侍者端上一道我从未见过的菜肴时的那种感觉 既疑惑不解 又充满好奇 但肯定有人认为它不错 否则就不会提供了 所以 我会先尝一尝 或许会喜欢上它 尽管它看上去的确很古怪!      对于 ViewState 也是如此 但是如果适应了它的风格 您会发现在许多情况下 您将乐于在自己的 ASP NET 应用程序中使用 ViewState 因为它可以帮助您使用更少的代码完成更多的工作 但是 有时也会对 ViewState 完全弃之不用 下面我们就这两种情况分别进行阐述 不过 让我们先回答什么是 ViewState 这个问题      答案 ViewState 用于维护页面的 UI 状态   Web 是没有状态的 ASP NET 页面也没有状态 它们在到服务器的每个往返过程中被实例化 执行 呈现和处理 作为 Web 开发人员 您可以使用众所周知的技术(如以会话状态将状态存储在服务器上 或将页面回传到自身)来添加状态 下面我们以图 中的注册窗体为例进行论述         图 恢复回传的窗体值      从上图中可以看出 我为便餐选择了一个无效的值 此窗体与 Web 上的多数窗体一样友好 它在出现错误的字段旁边显示一条有用的错误消息和一个星号 而且 窗体中还显示了我在其他文本框和下拉列表中输入的所有有效值 这在某种程度上是可能的 因为 HTML 窗体元素会在 HTTP 标头中将其当前值从浏览器发送到服务器 您可以使用 ASP NET 跟踪来查看回传的窗体值 如图 所示         图 HTTP 窗体中回传的值(通过 ASP NET 跟踪显示)      在 ASP NET 之前 通过多次回传将值恢复到窗体字段中完全是页面开发人员的责任 他们将不得不从 HTTP 窗体中逐个拾取回传值 然后再将其推回字段中 幸运的是 现在 ASP NET 可以自动完成这项任务 从而为开发人员免除了一项令人厌烦的工作 同时也无需再为窗体编写大量的代码 但这并不是 ViewState      ViewState(英文)是一种机制 ASP NET 使用这种机制来跟踪服务器控件状态值 否则这些值将不作为 HTTP 窗体的一部分而回传 例如 由 Label 控件显示的文本默认情况下就保存在 ViewState 中 作为开发人员 您可以绑定数据 或在首次加载该页面时仅对 Label 编程设置一次 在后续的回传中 该标签文本将自动从 ViewState 中重新填充 因此 除了可以减少繁琐的工作和代码外 ViewState 通常还可以减少数据库的往返次数      ViewState 的工作原理   ViewState 确实没有什么神秘之处 它是由 ASP NET 页面框架管理的一个隐藏的窗体字段 当 ASP NET 执行某个页面时 该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串 然后被分配给隐藏窗体字段的值属性(即 <input type=hidden>) 由于隐藏窗体字段是发送到客户端的页面的一部分 所以 ViewState 值被临时存储在客户端的浏览器中 如果客户端选择将该页面回传给服务器 则 ViewState 字符串也将被回传 在上面的图 中可以看到 ViewState 窗体字段及其回传的值      回传后 ASP NET 页面框架将解析 ViewState 字符串 并为该页面和各个控件填充 ViewState 属性 然后 控件再使用 ViewState 数据将自己重新恢复为以前的状态      关于 ViewState 还有三个值得注意的小问题      如果要使用 ViewState 则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>) 窗体字段是必需的 这样包含 ViewState 信息的隐藏字段才能回传给服务器 而且 该窗体还必须是服务器端的窗体 这样在服务器上执行该页面时 ASP NET 页面框架才能添加隐藏的字段   页面本身将 字节左右的信息保存在 ViewState 中 用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件 因此 即使该页面或应用程序禁用了 ViewState 仍可以在 ViewState 中看到少量的剩余字节   在页面不回传的情况下 可以通过省略服务器端的 <form> 标记来去除页面中的 ViewState   充分利用 ViewState   ViewState 为跨回传跟踪控件的状态提供了一条神奇的途径 因为它不使用服务器资源 不会超时 并且适用于任何浏览器 如果您要编写控件 那么肯定需要了解如何在控件中维护状态(英文)      开发人员在编写页面时同样可以按照几乎相同的方式来利用 ViewState 只是有时页面会包含不由控件存储的 UI 状态值 您可以跟踪 ViewState 中的值 使用的编程语法与会话和高速缓存的语法类似      [Visual Basic]    保存在 ViewState 中   ViewState( SortOrder ) = DESC       从 ViewState 中读取   Dim SortOrder As String = CStr(ViewState( SortOrder ))      [C#]   // 保存在 ViewState 中   ViewState[ SortOrder ] = DESC ;      // 从 ViewState 中读取   string sortOrder = (string)ViewState[ SortOrder ]; cha138/Article/program/net/201311/13322

相关参考

知识大全 ASP.NET ViewState 初探

ASP.NETViewState初探  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!请看下面的示例要

知识大全 ASP.NET缓存初探 使用得当是关键

ASP.NET缓存初探使用得当是关键  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文中对ASP

知识大全 ASP.NET AJAX客户端组件初探

ASP.NETAJAX客户端组件初探  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以组件的思想

知识大全 asp.net返回上一个页面

  //首先要获取URL如下所示  privatestringUrlReferrer    set    ViewState[UrlReferrer]=value;    get    if(View

知识大全 如何由ASP.NET 1.1移植到ASP.NET 2.0

如何由ASP.NET1.1移植到ASP.NET2.0  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET入门教程 10.5.3 ASP.NET 2.0的新特性[1]

ASP.NET入门教程10.5.3ASP.NET2.0的新特性[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 ASP.NET入门教程 10.4.1 ASP.NET2.0中的编译

ASP.NET入门教程10.4.1ASP.NET2.0中的编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 ASP.NET管道(1)

ASP.NETMVC4框架揭秘:ASP.NET管道(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 在ASP与ASP.NET之间共享对话状态(1)

在ASP与ASP.NET之间共享对话状态(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前

知识大全 ASP.NET开发要抛弃ASP旧习和破烂[1]

ASP.NET开发要抛弃ASP旧习和破烂[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使