6.6 清除页面状态
在控件开发时,有时候需要清除子控件的页面状态,比如在创建子控件时,以下是一个在数据绑定时清除视图并创建子控件的应用场景:
/// <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);
}
}
}