当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET教程:Control基类清理页面状态

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET教程:Control基类清理页面状态


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 51 ::
收藏到网摘: n/a

在控件开发时,有时候需要清除子控件的页面状态,比如在创建子控件时,以下是一个在数据绑定时清除视图并创建子控件的应用场景:

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。