当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  ASP.NET2.0服务器控件之自定义状态管理(2)

 ASP.NET2.0服务器控件之自定义状态管理(2)

点击次数:25 次 发布日期:2008-11-26 12:52:04 作者:源代码网
源代码网推荐      2、实现基于Control基类的自定义视图状态管理
源代码网推荐  
源代码网推荐    如果开发人员需要优化默认视图状态管理机制,以提高控件运行效率和性能,那么必须理解Control基类中默认视图状态管理机制。通过掌握这个管理机制,可以模仿其处理过程以实现自定义视图状态管理。
源代码网推荐  
源代码网推荐    实现基于Control基类的自定义视图状态管理,需要开发人员实现3个方法:LoadViewState、SaveViewState和TrackViewState。它们与上一小节中介绍的IStateManager接口成员方法同名,并且在方法意义上也基本相同。在此就不对这3个方法多做说明了。
源代码网推荐  
源代码网推荐    Control基类中的默认视图状态管理机制定义了一个StateBag类型的ViewState属性,并将视图状态管理的任务委托给它。下面请看Control基类的默认状态管理的实现逻辑。
源代码网推荐  
源代码网推荐  private StateBag _viewState;
源代码网推荐  protected virtual StateBag ViewState{
源代码网推荐   get {
源代码网推荐    if(_viewState != null)
源代码网推荐    {
源代码网推荐     return _viewState;
源代码网推荐    }
源代码网推荐    _viewState = new StateBag(ViewStateIgnoresCase);
源代码网推荐    if(IsTrackingViewState)
源代码网推荐     _viewState.TrackViewState();
源代码网推荐     return _viewState;
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  protected virtual void TrackViewState(){
源代码网推荐   if(_viewState != null) {
源代码网推荐    _viewState.TrackViewState();
源代码网推荐   }
源代码网推荐   return null;
源代码网推荐  }
源代码网推荐  
源代码网推荐  protected virtual object SaveViewState(){
源代码网推荐   if(_viewState != null) {
源代码网推荐    _viewState.SaveViewState();
源代码网推荐   }
源代码网推荐   return null;
源代码网推荐  }
源代码网推荐  protected virtual void LoadViewState(object savedState){
源代码网推荐   if(savedState != null) {
源代码网推荐    ViewState.LoadViewState(savedState);
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐    从上面的代码可以看出:ViewState属性是StateBag类型,当_viewState不为null时,则返回_viewState;当_viewState为null时,则初始化一个StateBag类型的变量_viewState,并判断控件是否正在跟踪其视图状态更改,如果服务器控件正在跟踪其视图状态更改,那么就调用TrackViewState方法开始状态跟踪,最后返回_viewState。另外,在TrackViewState、SaveViewState、LoadViewState方法中,均使用了StateBag类中有关视图状态管理的方法。
源代码网推荐  
源代码网推荐    在Control基类的默认视图状态管理过程中,由于定义了ViewState属性为StateBag类型,所以必然使用上文中StateBag类实现视图状态管理的逻辑。如果让Control基类实现IStateManager接口中的方法和属性,那么其实现过程必然与StateBag类实现IStateManager接口大同小异,这必然将造成重复,由此可能造成.net框架改变IStateManager接口的访问性质。此外,在进行自定义视图状态管理的过程中,可能出现StateBag类型与Control基类的视图状态管理机制的冲突,那样就可能产生混乱。而采用目前的这种方式,无论从灵活性、继承性、可复用性,以致从编程人员的习惯上,都具有很多优点。
源代码网推荐  
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华