在ASP.NET中清除页面状态

精贴 置顶
382 0

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

 

 

在控件开发时,有时候需要清除子控件的页面状态,比如在创建子控件时,以下是一个在数据绑定时清除视图并创建子控件的应用场景:
/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
public override void DataBind()
{
    base.OnDataBinding(EventArgs.Empty);
    Controls.Clear();
    ClearChildViewState(); //清理视图状态
    TrackViewState();
    CreateControlHierarchy(true);
    ChildControlsCreated = true;
}
本节介绍几个清理页面状态的方法,主要由Control基类提供。
1.HasChildViewState方法
获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。如果有任何子控件具有已保存的视图状态信息,则返回true;否则返回false。
2.IsChildControlStateCleared方法
获取一个值,该值指示当前控件中包含的控件是否具有控件状态。如果该控件的子级不使用控件状态,则返回true;否则返回false。
3.ClearChildState方法
同时清除子控件的视图状态和控件状态。其方法体如下:
protected void ClearChildState()
{
    this.ClearChildControlState();
    this.ClearChildViewState();
}
4.ClearChildControlState方法
清除控件状态。其代码如下:
protected void ClearChildControlState()
{
    if (this.ControlState >= ControlState.Initialized)
    {
        this.flags.Set(0x40000);
        if (this.Page != null)
        {
            this.Page.RegisterRequiresClearChildControlState(this);
        }
    }
}
控件状态是通过方法:
Page.RegisterRequiresControlState(this);
将控件注册为具有持久性控件状态的控件。同时也要调用方法:
this.Page.RegisterRequiresClearChildControlState(this);
清除控件状态,不同的是:此方法是内部方法。不供开发人员调用,只能通过ClearChild ControlState方法间接调用。
5.ClearChildViewState方法
此方法主要清除子控件的视图状态,其代码结构如下:
protected void ClearChildViewState()
{
    if (this._occasionalFields != null)
    {
        this._occasionalFields.ControlsViewState = null;
    }
}
方法体中设置控件视图状态的IDictionary对象ControlsViewState为null。

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
CSS cursor鼠标样式一览表 2012/6/25
.NET后台写JS代码 2011/11/3
网站地址多出jdfwkey的问题解析及... 2010/8/25
百度、google、Yahoo网站地图制作... 2011/1/30
数据库xxx的日志已满,请备份该数... 2013/7/19
<a>标签的伪类书写顺序问题... 2010/9/4
CEO名言 2010/8/31
什么是长尾关键词? 2010/9/24
Mysql 主从数据库同步 2010/9/12
用ASP实现网页BBS 2010/11/1
博主推荐
网站title标题如何正确修改不会被... 2013/8/26
ASP .NET MYSQL 的简单分页 并不... 2013/8/19
网站有弹窗广告这样的站点,百度... 2013/8/17
做淘宝SEO优化需要注意的8大问题 2013/8/17
淘宝网怎么做SEO优化 2013/8/17
站长们要学习的“苍井空精神” 2013/8/17
苹果公司今日发布了iOS 7第五个开... 2013/8/7
小米1刷V5系统WIFI不能连接解决办... 2013/8/1
本博客手机版上线咯!会员后台也... 2013/7/31
Win7系统环境安装配置PHP开发环境... 2013/7/29
随便看看
Java趣味编程:经典的农夫养牛问... 2013/6/21
.net将IP转换为10进制 2013/7/18
c#.net创建xml文件 2013/12/4
看懂这些故事 你做人就很成功了 2010/10/14
Dreamweaver快捷键大全 2010/9/9
php计算字符串中重复数字的出现次... 2010/10/11
域名跳转代码 2013/5/28
ActiveX组件 2010/10/22
.net获取URL路径多种方法 2010/11/12
为什么PR值在浏览器插件上显示为... 2010/10/2
北京 上海 杭州 深圳 广州 成都