服务器控件编程中的控件状态保存机制
服务器控件(Server Control)是ASP.NET中的一个亮点。我们知道大部分的服务器控件是依赖视图状态(ViewState)的,这个状态的保存有助于在回发(Postback)过程中保留当前控件的值,并进行还原。
虽然视图状态很有用,但它也会带来一些负面的影响,例如它将使得页面体积变大一些,因为它是用字符串(当然是已经经过编码的字符串)的形式保存在页面的一个隐藏域(Hidden Field)中的。基于性能方面的考虑,很多人都建议在合适的时候禁用视图状态(不管是在应用程序级别、页面级别,还是在控件级别),典型的做法例如下面这样就可以了
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" EnableViewState="false" %>
但是,如果视图状态一旦被禁用,那么就自然而然会失去了自动保留状态的特性。这个问题,尤其当我们在开发服务器控件的时候会很严重,一个事实就是:我们无法预知也无法控制使用者是否会在页面级别关闭视图状态。
为此,ASP.NET提供了另外一种机制,我们称为控件状态(Control State)。这使得控件开发者可以自己决定是否保存状态,而不受使用者或者调用方所左右。因为视图状态是无法被禁用的
下面是一个典型的写法
#region 控件状态及其保存
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Page.RequiresControlState(this);//这句代码很重要,声明我们需要为该控件进行状态保存
}
protected override void LoadControlState(object savedState)//重写该方法进行状态的还原
{
base.LoadControlState(savedState);
object[] status = (object[])savedState;
m_RecordCount =(int) status[0];
m_PageSize = (int)status[1];
m_IndexNum = (int)status[2];
m_pageIndex = (int)status[3];
}
protected override object SaveControlState()//重写该方法进行状态的保存
{
object[] status = new object[] { m_RecordCount, m_PageSize, m_IndexNum,m_pageIndex };//如果有多个属性需要保存,可以通过一个对象数组的方式保存
return status;
}
#endregion
服务器控件编程中的控件状态保存机制相关推荐
- 并发编程中常见的锁机制:乐观锁、悲观锁、CAS、自旋锁、互斥锁、读写锁
文章目录 乐观锁 VS 悲观锁 悲观锁 乐观锁 CAS CAS机制 ABA问题 CAS的优缺点 互斥锁 VS 自旋锁 互斥锁 自旋锁 对比及应用场景 读写锁 实现方式 读写锁 VS 互斥锁 乐观锁 V ...
- jsp编程中处理红头文件保存及使用
在好多的OA系统中,系统外部收到的文件如上机发文等是以红头文件的形式发布的,在OA系统中,如果采取打字的方式找人专门录入一次红头文件内容,对于有些包含领导批示意见等文件并不适用,比较好的办法是采取扫描 ...
- Java编程:Java的反射机制中的 getComponentType() 方法
转载自 Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...
- Qt编程中的信号和槽机制
Qt编程中的信号和槽机制 在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个"点击按钮可以关闭窗口"的功能. 关闭窗口的功能可以 ...
- Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...
- TCP/UDP编程中的问题汇总
TCP/UDP编程中的问题汇总 TCP和UDP发送大文件的问题. 答: 发送端: 发送时,先发送文件的名称及大小等信息. 然后,设置一个缓冲区的大小,假设为4K. 再循环读4K的文件内容,并发送,直到 ...
- Go并发编程中的那些事[译]
原文地址:Concurrent programming 原文作者:StefanNilsson 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:kobehah ...
- Java编程中“为了性能”需做的26件事
下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说, ...
- Linux 2.6内核中新的锁机制--RCU [转]
2005 年 7 月 01 日 本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用. 一. 引言 众所周知,为了保护共享 ...
最新文章
- 022_applescript快速入门教程
- iptables规则的查看、添加、删除和修改
- Sublime插件开发 启动Anaconda并运行对应Python脚本
- 力扣(LeetCode) 35. 搜索插入位置
- heat 用法 示例
- .NET平台下几种SOCKET模型的简要性能供参考
- CF980D Perfect Groups
- uni-app—从安装到卸载
- WebSocket协议入门介绍
- python自学视频推荐-python自学视频看这个就对了
- 计算机二进制祖宗是西方人?中国道教一张八卦图千年前早已解释!
- Overlay网络与物理网络的关系
- 【C++】面向对象之多态篇
- 远程监控系统中关于TP-Link路由器的设置方法
- 计算机桌面怎么全屏显示,台式电脑桌面两边黑框怎么调全屏 定位到缩放栏目...
- 51单片机:STC-ISP的USB驱动安装解决办法
- 红警2 Win7启动一系列问题
- 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数
- 第七届电工专项 如何进行焊接
- django中queryset的两大特性