视图状态机制下的IStateManager接口

本文节选自《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》一书

.NET框架为自定义视图状态管理提供了System.Web.UI.IStateManager接口,定义了任何类为支持服务器控件的视图状态管理而必须实现的属性和方法,服务器控件的视图状态由控件属性的累计值组成。该接口包括保存并加载服务器控件的视图状态值的方法,以及一个指示控件跟踪其视图状态的更改的方法。此接口的成员与Control类中的对应方法具有相同的语义。
若要自定义ASP.NET应用程序管理服务器控件视图状态的方式,必须创建一个实现此接口的类。代码如下:
/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
public interface IStateManager
{
    // Methods
    object SaveViewState();
    void LoadViewState(object state);
    void TrackViewState();

// Properties
    bool IsTrackingViewState { get; }
}
该接口包括以下几个成员:
    SaveViewState:保存自从页回发到服务器后发生的所有服务器控件视图状态更改,最后返回最新更改后的视图状态对象。如果没有与控件关联的视图状态,则此方法返回空。保存了视图状态后,页面类会把所有控件的视图状态对象转换为可以通过网络传输的Base64格式字符串形式,最终该字符串对象作为存储在Hidden元素中的变量返回给客户端。使用自定义视图状态时,一般使用SaveViewState和LoadViewState组合完成状态管理。
    LoadViewState:把SaveViewState方法保存的上一个页面的视图信息还原到控件复杂属性中。
    TrackViewState:在服务器控件的生存期内,将在Init事件结束时自动调用该方法。在开发模板数据绑定控件时调用此方法。此方法提醒ASP.NET监视服务器控件视图状态的更改。如果控件没调用TrackViewState()方法,则本次对控件属性的修改将不会被添加到__VIEWSTATE隐藏域中,下次页面回发时,控件的属性只恢复为之前的旧值。从性能角度讲,为了减少在网络上的传输量,应该只保存“变化”的数据到视图状态中,即仅对需要保存到视图中的数据才调用此方法。其实TrackViewState只是控制一个布尔值作标记,往视图中增加数据时,会判断该值是否为true,如果为true才将其加入视图数据。下节讲解StateBag类时还会说明其内部原理。
    IsTrackingViewState:返回当前控件视图是否被ASP.NET框架监视(是否存储该属性到视图中,与TrackViewState方法控制的是同一个标记)。
或许读者会想到,之前在开发控件时使用过视图存储属性值,如ViewState["Text"],而没有使用IStateManager接口控件为什么这样也能够正确保存值呢?在后面的6.2.3小节会说明其原因,事实上它也是使用了IStateManger接口,只是Control提供了更方便的管理而已。

视图状态机制下的IStateManager接口相关推荐

  1. Java并发编程(06):Lock机制下API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Lock体系结构 1.基础接口简介 Lock加锁相关结构中涉及两个使用广泛的基础API:ReentrantLock类和Condition接 ...

  2. .Net Discovery 系列之六--深入浅出.Net实时编译机制(下)

    接上文 在初始化时,HashTable中各个方法指向的并不是对应的内存入口地址,而是一个JIT预编译代理,这个函数负责将方法编译为本地代码.注意,这里JIT还没有进行编译,只是建立了方法表! 下表(表 ...

  3. 华为交换机在Telnet登录下自动显示接口信息

    因为用console连接交换机,默认是自动显示接口信息的,比如down掉一个接口后,会自动弹出接口被down掉的信息,但是在telnet连接下,默认是不显示这些信息的,需要开启后才可显示. 1.首先开 ...

  4. 深度残差收缩网络:(四)注意力机制下的阈值设置

    对于基于深度学习的分类算法,其关键不仅在于提取与标签相关的目标信息,剔除无关的信息也是非常重要的,所以要在深度神经网络中引入软阈值化.阈值的自动设置,是深度残差收缩网络的核心贡献.需要注意的是,软阈值 ...

  5. 1.综合能源系统优化运行(碳交易机制下考虑需求响应的综合能源系统优化运行)

    目录 复现文章: 主程序: 结果图 结论 私聊即可! 主要内容: 碳交易机制下考虑需求响应的综合能源系统优化运行--魏震波 摘要: 综合能源系统是实现"双碳"目标的有效途径,为进一 ...

  6. 碳交易机制下考虑需求响应的综合能源系统优化运行

    碳交易机制下考虑需求响应的综合能源系统优化运行 首先,根据负荷响应特性将需求响应分为价格型和替代型 2 类,分别建立了基于价格弹性矩阵的价格型需求响应模型,及考虑用能侧电能和热能相互转换的替代型需求响 ...

  7. 碳交易机制下考虑需求响应的综合能源系统优化运行论文复现——附代码

    目录 摘要: 一.区域综合能源系统(IEHS)的基本结构: 二.IEHS 优化运行模型: 三.求解方法: 四.求解结果: 五.Matlab复现代码 摘要: 综合能源系统是实现"双碳" ...

  8. 如何测试验证linux下的CAN接口

    前言 嵌入式linux下的CAN接口,如何方便地测试验证是一个问题.实际上Linux系统已经自带了测试验证的软件工具. 环境 硬件:NXP IMX6Solox,Kvaser Can Card 软件:嵌 ...

  9. 碳交易机制下考虑需求响应的综合能源系统优化运行综合能源系统是实现“双碳”目标的有效途径

    碳交易机制下考虑需求响应的综合能源系统优化运行综合能源系统是实现"双碳"目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系 ...

  10. linux支持pci-e硬盘吗,Linux下基于PCI-E接口的固态硬盘驱动设计与实现

    摘要: 随着信息技术的不断发展和创新,特别是自互联网出现以来,人类社会的信息总量每日剧增,呈现爆炸式的增长.人们对信息存储的效率也有了更高的要求,不再满足于单纯的容量提升.固态硬盘作为一个在存储领域刚 ...

最新文章

  1. java object finalize_Java Object finalize() 方法
  2. GraphSAGE:我寻思GCN也没我厉害!
  3. Hinton:硕士毕业就进企业提不出全新想法,AI好坏取决于社会制度
  4. Django后台管理之商品分类
  5. SqlServer Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)
  6. PHP-php://(类型)访问各个输入/输出流以及全局变量$HTTP_RAW_POST_DATA讲解
  7. OmniPlan Pro 4 for Mac(项目流程管理)
  8. solaris系统安装oracle数据库,solaris10下安装oracle11gr2详解!
  9. 二维空间:点到直线距离的计算
  10. Geodatabase
  11. wheeltech惯导模块使用
  12. Median(查找中位数)
  13. 全国大学生软件测试大赛web应用测试,2017全国大学生软件测试大赛Web应用测试(团体)夏季预选赛入选名单...
  14. HTML嵌入三维仿真 .ezo文件的方法
  15. ps:图像格式的选择
  16. sklearn 学习之 model_selection
  17. SparkRDD——行动算子
  18. soj 3172 Fisherman (01背包的装满)
  19. 从键盘输入三角形的直角边,利用hypot()函数输出三角形的斜边
  20. Bellhop 海底地形起伏条件下的传播特性

热门文章

  1. 认真去做,我会做得很棒!
  2. 部署 kubectl 命令行工具
  3. Dynamics CRM 2015中的SSRS Report集成配置
  4. 使用python生成c文件模板
  5. quartz 时间设置(定时任务scheduler)
  6. 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(下篇)
  7. HAPPY 2010
  8. python3.7.1安装
  9. 强化学习 RL - DQN - 智能体Agent
  10. NAACL2021 | 苏大阿里提出:一种统一的基于跨度的意见挖掘方法