溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET復(fù)雜屬性和狀態(tài)管理舉例分析

發(fā)布時(shí)間:2021-12-06 15:43:35 來源:億速云 閱讀:120 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“ASP.NET復(fù)雜屬性和狀態(tài)管理舉例分析”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

ASP.NET組件設(shè)計(jì)之復(fù)雜屬性聲明/持久:

所謂復(fù)雜屬性,即通常不可用CLR的基本數(shù)據(jù)類型表達(dá)的屬性。譬如,F(xiàn)ontInfo,即代表字體屬性,包含Bold 、Name、Size、Color等信息(通常稱為子屬性)。

對(duì)于復(fù)雜屬性,控件在聲明時(shí)候,通常采用 屬性—子屬性 的連字符表示復(fù)雜屬性的一個(gè)子屬性。

﹤sdp:TextBox id=”Textbox1” Font-Name=”Vender” Font-Size=”12pt” runat=”server” /﹥

其中的劃線部分即代表了Font屬性。

復(fù)雜屬性的另外一種表達(dá)是,將復(fù)雜屬性嵌套放于控件聲明標(biāo)簽之中,乘坐 內(nèi)部屬性持久性(inner property persistence )。如:

﹤asp:DataGrid runat=”Server”﹥   ﹤HeaderStyle ForeColor=”Red” /﹥      ﹤/asp:DataGrid ﹥

復(fù)雜屬性序列化/持久化的設(shè)計(jì)時(shí)支持

設(shè)計(jì)時(shí)實(shí)現(xiàn)是在控件之外實(shí)現(xiàn)的,利用元數(shù)據(jù)(attribute)來實(shí)現(xiàn)。對(duì)于連字符實(shí)現(xiàn)的子屬性,經(jīng)過設(shè)定特定的attribute,即可影響設(shè)計(jì)器從而實(shí)現(xiàn)設(shè)計(jì)時(shí)支持。

DesignerSerializationVisibility 實(shí)際上在ASP.NET中是指DesignerSerializationVisibilityAttribute的屬性類,通過元數(shù)據(jù)中指定,并且設(shè)為:

DesignerSerializationVisibility.Content可以讓設(shè)計(jì)器知道,應(yīng)當(dāng)將復(fù)雜屬性的內(nèi)容進(jìn)行序列化而不是屬性本身

DesignerSerializationVisibility.Hidden       讓設(shè)計(jì)器忽略屬性和屬性內(nèi)容

DesignerSerializationVisibility.Visible       讓設(shè)計(jì)器以正常方式序列化

所謂正常方式,就是以字符傳、整型如果不屬于這些就用字節(jié)方式持久化屬性(當(dāng)然對(duì)于復(fù)雜屬性這相當(dāng)劃不來)。

NotifyParentProperty(true) 表示屬性瀏覽器對(duì)控件得此復(fù)雜屬性的修改可以通告給控件,并告知之上的各個(gè)對(duì)象(通常會(huì)給設(shè)計(jì)器應(yīng)用程序),告知屬性已經(jīng)“臟”了。這些約定對(duì)控件設(shè)計(jì)者和設(shè)計(jì)器開發(fā)者以及ASP.NET頁面的開發(fā)者都很重要。

對(duì)于標(biāo)簽嵌套方式的屬性持久,應(yīng)當(dāng)采用ParseChilren(true)來指定屬性的持久,設(shè)計(jì)器實(shí)現(xiàn)嵌套方式則應(yīng)當(dāng)指定PersistChildren(false)讓設(shè)計(jì)器將嵌套標(biāo)簽轉(zhuǎn)化為復(fù)雜屬性的一部分(而不是內(nèi)嵌的子控件)

ASP.NET組件設(shè)計(jì)之類型轉(zhuǎn)換器

為了解讀復(fù)雜屬性的持久形式為設(shè)計(jì)運(yùn)行時(shí)形式,需要對(duì)復(fù)雜屬性指定類型轉(zhuǎn)換器,基本目標(biāo)是將持久形式解讀轉(zhuǎn)換為CLR支持的類型,同時(shí)也將屬性的CLR類型表達(dá)為設(shè)計(jì)時(shí)、運(yùn)行時(shí)的持久形式。即將Font-Size=”8pt”轉(zhuǎn)換為int32 的8,將復(fù)雜屬性的8持久化為Font-Size=”8pt”.

類型轉(zhuǎn)換器的實(shí)現(xiàn)不依賴于任何用戶界面功能。因此,可在 Windows 窗體和 Web 窗體中應(yīng)用同一個(gè)類型轉(zhuǎn)換器。

類型轉(zhuǎn)換器繼承自System.ComponentModel.TypeConverter。

ASP.NET組件設(shè)計(jì)之實(shí)現(xiàn)類型轉(zhuǎn)換器的步驟:

1、 定義一個(gè)從 System.ComponentModel.TypeConverter 派生的類。

2、 重寫 CanConvertFrom 方法,指定轉(zhuǎn)換器可從中轉(zhuǎn)換的類型。此方法是重載方法。

3、 重寫實(shí)現(xiàn)轉(zhuǎn)換的 ConvertFrom 方法。此方法是重載方法。

4、 重寫 CanConvertTo 方法,指定轉(zhuǎn)換器可轉(zhuǎn)換為的類型。轉(zhuǎn)換為字符串類型不需要重寫此方法。此方法是重載方法。

5、 重寫實(shí)現(xiàn)轉(zhuǎn)換的 ConvertTo 方法。此方法是重載方法。

6、 重寫執(zhí)行驗(yàn)證的 IsValid 方法。此方法是重載方法。

通過TypeConverter(typeof(somecustimoziedTypeConverter))的方式確定某個(gè)屬性同特定的類型轉(zhuǎn)換器相關(guān)。

對(duì)于ASP.NET應(yīng)用來講,如何保持兩個(gè)頁面間的控件的復(fù)雜屬性很重要。Control類的默認(rèn)狀態(tài)管理交給ViewSatte字典,而復(fù)雜屬性,使用ViewState時(shí)不可能的,這必須用到IstateManager接口參與狀態(tài)管理。

 Interface IstateManager   {      public bool IsTrackingViewState ; //當(dāng)由類實(shí)現(xiàn)時(shí),獲取一個(gè)值,通過該值指示服務(wù)器控件是否正在跟蹤其視圖狀態(tài)更改。           void LoadViewState(   object state); //當(dāng)由類實(shí)現(xiàn)時(shí),加載服務(wù)器控件以前保存的控件視圖狀態(tài)。    object SaveViewState(); //當(dāng)由類實(shí)現(xiàn)時(shí),將服務(wù)器控件的視圖狀態(tài)更改保存到 Object。    void TrackViewState();//當(dāng)由類實(shí)現(xiàn)時(shí),指示服務(wù)器控件跟蹤其視圖狀態(tài)更改。   }

ASP.NET組件設(shè)計(jì)之Control,Control的ViewSatte屬性實(shí)際上就是一個(gè)復(fù)雜屬性,本質(zhì)上是一個(gè)字典類,通過實(shí)現(xiàn)了IstateManager接口參與狀態(tài)管理(ViewState的細(xì)節(jié)):

1、 ViewState的數(shù)據(jù)類型是復(fù)雜屬性System.Web.UI.StateBag類。實(shí)現(xiàn)IstateManager接口的字典。保存多項(xiàng)鍵/值對(duì),鍵為字符串,值為對(duì)象,當(dāng)某個(gè)對(duì)象自動(dòng)添加到State把實(shí)例即ViewState中去時(shí),自動(dòng)加入一個(gè)StateItem對(duì)象,存有實(shí)際的屬性值和相關(guān)的布爾標(biāo)志,知識(shí)此屬性(StateItem)在初始化后修改過。

2、 在接口的TrackViewState中將此函數(shù)的值對(duì)應(yīng)到StateBag的內(nèi)部布爾變量,如果為真,則當(dāng)StateItem添加時(shí)候(跟蹤一個(gè)對(duì)象的ViewState),或者修改行為,都將StateItem標(biāo)記為修改過。

3、 SaveViewSate中,枚舉項(xiàng)目,創(chuàng)建并返回兩個(gè)ArrayList分別標(biāo)記修改過的鍵和值。

4、 LoadViewSatet執(zhí)行SaveState的逆操作。

當(dāng)在ViewSatte中保存屬性時(shí)候,其狀態(tài)會(huì)自動(dòng)維護(hù)??梢栽赩iewState中保存任何控減災(zāi)往返傳送時(shí)需要的數(shù)(而不是全部數(shù)據(jù),從效率考慮剔除冗余數(shù)據(jù)),且任何保存在ViewState紅的數(shù)據(jù)必須時(shí)通過LosFormatter串行化的

所有復(fù)雜屬性的狀態(tài)保存應(yīng)當(dāng)實(shí)現(xiàn)IstateManager來將復(fù)雜屬性轉(zhuǎn)換為可以在ViewState中保存的簡(jiǎn)單屬性,并且也可以ViewState中保存的簡(jiǎn)單屬性恢復(fù)組合為復(fù)雜屬性。

“ASP.NET復(fù)雜屬性和狀態(tài)管理舉例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI