<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuā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)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

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

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

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

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

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

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

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

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

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

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

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

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

        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];
             }
            }
           }
          }
         }
        }

          請(qǐng)讀者注意:以上代碼為示意性代碼,并非嚴(yán)格意義上的實(shí)現(xiàn)代碼。在此列出,主要是用于說(shuō)明StateBag類(lèi)實(shí)現(xiàn)IStateManager接口的邏輯過(guò)程。

          通過(guò)上面的代碼,我們可以看到:

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

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

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

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

          

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專(zhuān)題
        Top
        主站蜘蛛池模板: 亚洲理论精品午夜电影| 狠狠综合亚洲综合亚洲色| 亚洲av伊人久久综合密臀性色| 亚洲另类古典武侠| eeuss影院免费直达入口| 8090在线观看免费观看| 亚洲免费日韩无码系列| 四虎亚洲精品高清在线观看| 两个人看的www高清免费观看| 夫妻免费无码V看片| 久久亚洲sm情趣捆绑调教| 一级毛片免费一级直接观看| 永久免费毛片在线播放| 久久精品亚洲精品国产色婷| 亚洲成aⅴ人片久青草影院按摩| 中文无码成人免费视频在线观看| 永久免费无码网站在线观看| 久久久久亚洲AV无码网站| 4虎1515hh永久免费| 久久国产亚洲观看| 女人隐私秘视频黄www免费| 亚洲精品成人av在线| 国产精品高清免费网站| 亚洲av无码乱码国产精品| 亚洲三级高清免费| 亚洲高清无在码在线电影不卡| 免费福利视频导航| 亚洲国产精品xo在线观看| 最近中文字幕免费mv视频7| 亚洲中文字幕久久精品无码2021| 日韩精品无码一区二区三区免费 | 免费看国产成年无码AV片| 亚洲综合在线视频| 午夜一区二区免费视频| 成人a毛片视频免费看| 全亚洲最新黄色特级网站| 亚洲爆乳无码专区www| 亚洲片国产一区一级在线观看| 二个人看的www免费视频| 亚洲色精品88色婷婷七月丁香| 久久久精品视频免费观看|