控件开发时有时候需要清除子控件的页面状态比如在创建子控件时以下是一个在数据绑定时清除视图并创建子控件的应用场景
public override void DataBind()
{
baseOnDataBinding(EventArgsEmpty);
ControlsClear();
ClearChildViewState(); //清理视图状态
TrackViewState();
CreateControlHierarchy(true);
ChildControlsCreated = true;
}
本节介绍几个清理页面状态的方法主要由Control基类提供
.HasChildViewState方法
获取一个值该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置如果有任何子控件具有已保存的视图状态信息则返回true否则返回false
.IsChildControlStateCleared方法
获取一个值该值指示当前控件中包含的控件是否具有控件状态如果该控件的子级不使用控件状态则返回true否则返回false
.ClearChildState方法
同时清除子控件的视图状态和控件状态其方法体如下
protected void ClearChildState()
{
thisClearChildControlState();
thisClearChildViewState();
}
.ClearChildControlState方法
清除控件状态其代码如下
protected void ClearChildControlState()
{
if (thisControlState >= ControlStateInitialized)
{
thisflagsSet(x);
if (thisPage != null)
{
thisPageRegisterRequiresClearChildControlState(this);
}
}
}
控件状态是通过方法
PageRegisterRequiresControlState(this);
将控件注册为具有持久性控件状态的控件同时也要调用方法
thisPageRegisterRequiresClearChildControlState(this);
清除控件状态不同的是此方法是内部方法不供开发人员调用只能通过ClearChild ControlState方法间接调用
.ClearChildViewState方法
此方法主要清除子控件的视图状态其代码结构如下
protected void ClearChildViewState()
{
if (this_occasionalFields != null)
{
this_occasionalFieldsControlsViewState = null;
}
}
方法体中设置控件视图状态的IDictionary对象ControlsViewState为null