国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:45:50
文檔

ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理

ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理: 在前面的系列文章中,我們曾經(jīng)介紹了視圖狀態(tài)和控件狀態(tài)的基本概念和典型應(yīng)用,從中可以發(fā)現(xiàn),視圖狀態(tài)和控件狀態(tài)對于自定義服務(wù)器控件實現(xiàn)的重要性。本文將繼續(xù)這一主題,重點介紹實現(xiàn)視圖狀態(tài)和控件狀態(tài)自定義管理的方法。 自定義視圖狀態(tài)管理 在介紹視圖
推薦度:
導(dǎo)讀ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理: 在前面的系列文章中,我們曾經(jīng)介紹了視圖狀態(tài)和控件狀態(tài)的基本概念和典型應(yīng)用,從中可以發(fā)現(xiàn),視圖狀態(tài)和控件狀態(tài)對于自定義服務(wù)器控件實現(xiàn)的重要性。本文將繼續(xù)這一主題,重點介紹實現(xiàn)視圖狀態(tài)和控件狀態(tài)自定義管理的方法。 自定義視圖狀態(tài)管理 在介紹視圖

     在前面的系列文章中,我們曾經(jīng)介紹了視圖狀態(tài)和控件狀態(tài)的基本概念和典型應(yīng)用,從中可以發(fā)現(xiàn),視圖狀態(tài)和控件狀態(tài)對于自定義服務(wù)器控件實現(xiàn)的重要性。本文將繼續(xù)這一主題,重點介紹實現(xiàn)視圖狀態(tài)和控件狀態(tài)自定義管理的方法。

  自定義視圖狀態(tài)管理

  在介紹視圖狀態(tài)時,我們曾經(jīng)提到過:對于簡單屬性,例如,String、Int等類型,.NET執(zhí)行引擎將自動啟用默認視圖狀態(tài)管理機制,以便完成相應(yīng)的功能。然而,如果開發(fā)人員在ViewState中保存的是自定義數(shù)據(jù)類型,或者需要實現(xiàn)自定義方式優(yōu)化視圖狀態(tài)管理時,則必須實現(xiàn)自定義視圖狀態(tài)管理。

  實現(xiàn)自定義視圖狀態(tài)管理可以通過兩種方法。方法一:實現(xiàn)System.Web.UI命名空間中的IStateManager接口成員,其中包括IsTrackingViewState屬性和TrackViewState、SaveViewState和LoadViewState方法。這種方法主要是針對自定義數(shù)據(jù)類型的視圖狀態(tài)管理的情況。方法二:重寫Control基類的3個視圖狀態(tài)管理方法:TrackViewState、SaveViewState和LoadViewState。這些方法與IStateManager接口定義的3個方法名稱一致。這種方法主要用于通過自定義方式優(yōu)化默認視圖狀態(tài)管理的情況,其主要目的在于提高效率和性能。掌握以上兩種實現(xiàn)方法的捷徑是,必須深刻理解.NET框架內(nèi)部實現(xiàn)視圖狀態(tài)管理的過程。下面兩小節(jié)內(nèi)容都是有關(guān)內(nèi)部實現(xiàn)方法的介紹。每一節(jié)中均有實現(xiàn)代碼,實際就相當于實例代碼。所有服務(wù)器控件的自定義視圖狀態(tài)管理的實現(xiàn)都不會偏離那些代碼所表達的邏輯。當讀者真正掌握了那些內(nèi)部實現(xiàn)方法,那么自定義視圖狀態(tài)管理的實現(xiàn)方法也就迎刃而解了。

  1、實現(xiàn)基于IStateManager接口的自定義視圖狀態(tài)管理

  對于復(fù)雜屬性而言,多數(shù)需要實現(xiàn)自定義視圖狀態(tài)管理,其關(guān)鍵是實現(xiàn)System.Web.UI.IStateManager接口中定義的方法和屬性。下面列舉了IStateManager接口定義代碼。

public interface IStateManager{ bool IsTrackingViewState {get;} void LoadViewState(object state); object SaveViewState(); void TrackViewState();}
  如上代碼所示,IStateManager接口要求類實現(xiàn)IsTrackingViewState屬性,以及LoadViewState、SaveViewState和TrackViewState方法。IsTrackingViewState屬性定義,當由類實現(xiàn)時,獲取一個布爾值,通過該值指示服務(wù)器控件是否正在跟蹤其視圖狀態(tài)更改。如果服務(wù)器控件正在跟蹤其視圖狀態(tài)更改,則為true;否則為false。SaveViewState方法定義,當由類實現(xiàn)時,將服務(wù)器控件的視圖狀態(tài)更改保存到Object中。LoadViewState方法定義,當由類實現(xiàn)時,加載服務(wù)器控件以前保存的控件視圖狀態(tài),其中的參數(shù)state表示包含控件保存的視圖狀態(tài)值的Object。TrackViewState方法定義,當由類實現(xiàn)時,指示服務(wù)器控件跟蹤其視圖狀態(tài)更改。

  ViewState屬性與IStateManager接口之間存在密切聯(lián)系。ViewState屬性的類型是StateBag類,StateBag類通過實現(xiàn)IStateManager接口中定義的方法和屬性來參與狀態(tài)管理。其實現(xiàn)過程如下。

public sealed class StateBag : IStateManager, IDictionary,ICollection, IEnumerable{
 private bool _isTrackingViewState;
 private ArrayList _keys;
 private ArrayList _values;
 private StateItem _item;
 bool IStateManager.IsTrackingViewState {
  get { return _isTrackingViewState; }
 }
 void IStateManager.TrackViewState() {
  _isTrackingViewState = true;
 }
 object IStateManager.SaveViewState() {
  _keys = new ArrayList();
  _values = new ArrayList();
  IDictionaryEnumerator myDirctionaryEnumerator = this.GetEnumerator();
  while(myDictionaryEnumerator.MoveNext()) {
   if(this.Item[(String)myDictionaryEnumerator.Key].IsDirty) {
    _keys.Add(myDictionaryEnumerator.Key);
    _values.Add(myDictionaryEnumerator.Value);
   }
  }
  if(_keys.Count>0) {
   return new Pair(_keys,_values);
  }
 }
 void IStateManager.LoadViewState(object savedState) {
  if(savedState is Pair) {
   _keys = (ArrayList)tempP.First;
   _values = (ArrayList)tempP.Second;
   IDictionaryEnumerator myDirctionaryEnumerator = this.GetEnumerator();
   while(myDictionaryEnumerator.MoveNext()) {
    for(int j=0;j<_keys.Count;j++)
    {
     if((String)myDictionaryEnumerator.Key == _keys[j].ToString());
     {
      this.Item[_keys[j].ToString()].Value = (object)_values[j];
     }
    }
   }
  }
 }
}

  請讀者注意:以上代碼為示意性代碼,并非嚴格意義上的實現(xiàn)代碼。在此列出,主要是用于說明StateBag類實現(xiàn)IStateManager接口的邏輯過程。

  通過上面的代碼,我們可以看到:

  (1)在IsTrackingViewState屬性中,將該屬性設(shè)置為只讀,并且使用私有變量_isTrackingViewState。

  (2)在TrackViewState方法中,把IsTrackingViewState屬性使用的私有變量_isTrackingViewState設(shè)置為true,這指示系統(tǒng)當某個StateItem添加到StateBag中,或者某個StateItem值被修改時,StateBag類就會自動將該StateItem標記為修改過即添加dirty標記。

  (3)在SaveViewState方法中,循環(huán)StateBag中的每個StateItem,如果該StateItem被標記為dirty,那么就將其鍵和值分別添加到兩個ArrayList中,并返回該對象。

  (4)在LoadViewState方法中,執(zhí)行了與SaveViewState方法相反的操作。首先將savedState對象分解為兩個保存有鍵和值的ArrayList,然后將其中的值加載到相應(yīng)的StateItem對象中。

  

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理

ASP.NET2.0服務(wù)器控件之自定義狀態(tài)管理: 在前面的系列文章中,我們曾經(jīng)介紹了視圖狀態(tài)和控件狀態(tài)的基本概念和典型應(yīng)用,從中可以發(fā)現(xiàn),視圖狀態(tài)和控件狀態(tài)對于自定義服務(wù)器控件實現(xiàn)的重要性。本文將繼續(xù)這一主題,重點介紹實現(xiàn)視圖狀態(tài)和控件狀態(tài)自定義管理的方法。 自定義視圖狀態(tài)管理 在介紹視圖
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产91久久久久久久免费 | 欧美综合亚洲图片综合区 | 99精品热视频 | 91系列在线观看免费 | 日韩欧美激情 | 欧美高清一区二区三 | 99久久精品国产综合一区 | 久久久网久久久久合久久久久 | 国产在线观看一区二区三区 | 日韩欧美色综合 | 日本黄a| 国产国拍亚洲精品午夜不卡17 | 五十路夫妻 | 精品久久久久久综合网 | 亚洲欧美在线观看视频 | 久久久国产这里有的是精品 | 香蕉视频免费在线 | 欧美日韩性生活 | 欧美色图在线观看 | 亚洲欧美日韩在线精品一区二区 | 国产91丝袜在线播放动漫 | 亚洲欧美字幕 | 国产欧美日韩精品综合 | 不卡中文字幕在线观看 | 久久精品免费一区二区视 | 久久99精品久久 | 久久久久国产成人精品亚洲午夜 | 久久无码av三级 | 国产观看| 国产在线一区二区三区 | 日韩欧美高清视频 | 亚洲欧美视屏 | 国产一级特黄全黄毛片 | 国产成人久久精品一区二区三区 | 人与鲁牲交持级毛片 | 国产在线精品一区二区高清不卡 | 美女视频黄a视频免费全过程在线 | 国外欧美一区另类中文字幕 | 国内精品久久久久久中文字幕 | 精品国产一区二区 | 黄色毛片免费看 |