视图状态(view state)是在单个页面中保存信息的第一选择,ASP.NET Web控件也使用试图状态在回发间保存属性值。通过页面内建的 ViewState 属性,你可以把自己的数据放入到视图状态集合中,可以保存的信息类型包括简单数据类型和自定义对象。那么,.Net开发环境下的视图状态与基于COM下的传统视图状态作用有何不同呢?

基于COM的视图状态

在传统(基于COM)ASP下,在构建即将输出的HTTP响应时,WEB开发者需要手动为传入的窗体部件重新填充值。例如,如果传入的HTTP请求包括5个带有特定值的文本框,*aspx文件需要提取当前的值(通过Form或者Request对象的QueryString集合)并且手动把它们放回到HTTP响应流里(即拖放)。如果开发者没有设置这个操作,呈现给调用者的就是5个空的文本框!

基于.Net的视图状态

在ASP.NET下,我们不在需要手动删除和重新填充位于HTML部件内的值,因为ASP.NET运行时将自动嵌入一个隐藏的表单字段(名为_VIEWSTATE),其范围时浏览器和一个指定的页面之间。分配到这个字段的数据是一个64位编码的字符串,它包括一个描速当前页面上的INIT事件处理程序的作用域内访问web部件的状态最冒险)同时,恰恰在输出相应被提交回发出请求的浏览器之前,_VIEWSTATE数据被用来重新填充窗体部件。显然,ASP.NET最大的优点就是不需要任何用户参与。当然,如果愿意的话,用户总是能够与默认功能交互。需要注意的是,你是在*.ASPX文件中直接硬编码了ListBox内的项。你已经知道,在HTML表单内的<asp:定义将在最后的HTTP响应前自动提交会它们的HTML代码(假如他们有RUNAT=”SERBVER”特性)。最简短的一句话概括就是:在.NET下,较大的视图状态数据将自动被压缩,以减少该隐藏表单字段的大小。

视图状态示例

下面的代码演示了页面如何使用视图状态,它允许用户保存一系列的值,并将其恢复。

public partial class Chapter06_ViewStateTest : System.Web.UI.Page{protected void btnSave_Click(object sender, EventArgs e){SaveAllText(this.Table1.Controls, true);

}

protected void btnRestore_Click(object sender, EventArgs e){RestoreAllText(this.Table1.Controls, true);}

private void SaveAllText(ControlCollection controls, bool saveNested){foreach (Control control in controls)

{if (control is TextBox)

{ViewState[control.ID] = ((TextBox)control)。Text;}

// bool类型的 saveNested 参数给方法提供了更大的灵活性 www.sytm.net  // 可以控制是否需要递归

if (control.Controls != null && saveNested){SaveAllText(control.Controls, true);

}

}

}

private void RestoreAllText(ControlCollection controls, bool saveNested){foreach (Control control in controls)

{if (control is TextBox)

{if (ViewState[control.ID] != null)

{((TextBox)control)。Text = ViewState[control.ID].ToString();}

}

if (control.Controls != null && saveNested){RestoreAllText(control.Controls, true);

}

}

}

}

Asp.net视图状态的作用的更多相关文章

  1. ASP.NET machineKey的作用和使用方法

    ASP.NET machineKey的作用 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> ...

  2. ASP.NET - 视图状态概述

    本文转载自dodream 视图状态是 ASP.NET 页框架用于在往返过程之间保留页和控件值的方法.在呈现页的 HTML 标记时,必须在回发过程中保留的页和值的当前状态将被序列化为Base64 编码字 ...

  3. ASP.NET AntiXSS的作用

    XSS跨站脚本攻击        是指用户输入HTML编码对网站进行跨站攻击.            通过使用FCKeditor.FreeTextBox.Rich TextBox.Cute Edito ...

  4. ASP.NET私有构造函数作用

    一.私有构造函数的特性 1.一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员. 2.私有构造函数是一种特殊的实例构造函数.它通常用在 ...

  5. .net,C#,Vb,F#,Asp,Asp.net区别以及作用和方向

    .net是平台,其他都是运行在其.NET FrameWork环境下的 C#,Vb都是语言运行在.net 平台下 Asp,Asp.net 都是用来写Web网页的,但是Asp和Asp.net有区别 Asp ...

  6. 精通C#(第6版)

    <精通C#(第6版)> 基本信息 原书名:Pro C# 5.0 and the .NET 4.5 framework,sixth edition 作者: (美)Andrew Troelse ...

  7. ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构

    APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...

  8. [转]ASP.NET 页生命周期概述

    原文链接:http://msdn.microsoft.com/zh-cn/library/ms178472(v=vs.110).aspx  对应版本:.NET 4.0 ASP.NET 页运行时,此页将 ...

  9. ASP.NET 安全认证

    一. 新建一个测试项目 新建一个测试项目,包含三张页面(Default.aspx.Login.aspx.UserInfo.aspx).   二. 修改 Web.config 1.把<authen ...

随机推荐

  1. 51nod1821 最优集合 贪心

    首先考虑一个集合的最大优美值怎么求出 考虑新增一个数,假设我们现在的优美值已经达到了$V$,那么只需要一个$[1, V + 1]$的数就可以使$V$达到更大 为了保证能添加尽可能多的数进来,我们这么构 ...

  2. Nginx日志切割工具——logrotate 使用记录

    1.安装 logrotate是Linux系统自带,无需安装 2.配置 进入[/etc/logrotate.d/nginx]文件修改配置 # 需要备份的日志路劲,一个或多个都可以 /data/logs/ ...

  3. bzoj 3784

    第三道点分治. 首先找到黄学长的题解,他叫我参考XXX的题解,但已经没有了,然后找到另一个博客的简略题解,没看懂,最后看了一个晚上黄学长代码,写出来然后,写暴力都拍了小数据,但居然超时,....然后改 ...

  4. 四、python之 if while for

    一.if条件判断 if 条件判断: 逻辑操作…… …… else: 逻辑操作…… 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. ...

  5. timeago.js-时间显示插件

    注意事项: 1. 时间格式 = “2018-03-02 17:13:00”时,动态获取的时间无法通过 拼接字符串的方法 添加到 dom元素的 datetime属性上,结果为 <div class ...

  6. CentOS 6.9/7通过yum安装指定版本的PostgreSQL扩展PostGIS

    一.安装PostGIS扩展插件(24_10) // 安装EPEL源 # rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-rele ...

  7. Druid 配置_配置WebStatFilter

    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter WebStatFilt ...

  8. USACO numtri 数塔问题

    /* ID:kevin_s1 PROG:numtri LANG:C++ */ #include <iostream> #include <cstdio> #include &l ...

  9. Java垃圾回收精粹 — Part4

    Java垃圾回收精粹分4个部分,本篇是第4部分.在第4部分里介绍了G1收集器.其他并发收集器以及垃圾收集监控和调优. Garbage First (G1) 收集器 G1 (-XX:+UseG1GC)收 ...

  10. 分享开源 Markdown 编辑器 Mditor 的「桌面版」

    简单说明 Mditor 最早只有「组件版」,随着「桌面版」的发布,Mditor 目前有两个版本: 可嵌入到任意 Web 应用的 Embed 版本,这是一桌面版的基础,Repo: https://git ...