FoxOne---一個快速高效的BS架構--WEB控制項屬性編輯器

來源:互聯網
上載者:User

標籤:

FoxOne---一個快速高效的BS架構--(1)

FoxOne---一個快速高效的BS架構--(2)

FoxOne---一個快速高效的BS架構--(3)

FoxOne---一個快速高效的BS架構--(4)

FoxOne---一個快速高效的BS架構--WEB控制項屬性編輯器

 

我們都知道,VS中有個WEBFORM的控制項屬性編輯器,能夠自動反射控制項的各個屬性,並且根據屬性的類型出現相應的編輯控制項,例如:

1.布爾類型,對應下拉框,裡面的選項出現 是 和 否

2.枚舉類型,對應下拉框,裡面的選項出現的是枚舉的各個值

3.string類型和int類型,出現的都是輸入框

對於除String和實值型別之外的其它類型的屬性,支援得就不太好了,需要手動去實現自己的UITypeEditor,並且用Attribute的方式聲明到屬性中。

如果不聲明自訂複雜類型對應的Editor,那麼結果將如下面的User屬性:

只是給了一個慘白的輸入框,沒什麼實際意義,只是想告訴你這個屬性我識別到了,無能為力。。。

 

顯然我不可能讓每個實現了自訂控制項的人都去實現一次UITypeEditor,所以我決定基於VS控制項屬性編輯器的基礎之上,增加對其它類型的支援,包括:

1.所有繼承自IControl介面的介面類型;

2.所有實現自IControl介面的類型及其子類;

3.泛型列表屬性(IList<T>),不過類型T也只能是實現了IControl或其實作類別的子類;

效果是這樣的:

上面的是Table控制項的各個屬性,其中String和實值型別的屬性出現在“表格組件”那一欄,其它類型的屬性分別出現在各個選項卡中,有介面,有複雜類型,也有泛型清單類型;

其中,對於泛型清單類型,出現的編輯頁面如下:

點擊這個頁面的”新增“時,出現的是對TableColumn類型的編輯;

 

對於自訂的複雜類型,效果如下:

 

對於介面類型的屬性,出現如下編輯頁:

注意中出現的五個供選擇的資料來源是實現了IListDataSource的類型,只要是實現了特定的介面,無需一一註冊也會被自動識別到(當然那個擴充是出現在你後來建立的工程的話,那工程的Assembly還是要註冊一下的)

當然也可以用特定的Attribute去聲明屬性需要特定的編輯控制項,或者資料來源,或者是否出現在編輯器中。

例如:

對於”資料表資料來源“,在編輯它的屬性時,表名是可以直接選擇,而不用手動填寫的,但屬性類型是String的,這是因為:

在代碼中,我用FormFieldAttribute聲明了這個屬性需要用下拉框,並且用FunctionDataSourceAttribute聲明這個下拉框的資料來源來自AllTableDataSource。

這樣的話,這個控制項屬性編輯器就很靈活了。。

對於這樣的設計,實現中有四點是比較關鍵的:

1.對於控制項屬性類型的反射識別,對於不同的類型出現不同的編輯頁面;

2.控制項的系列化;

3.系列化之後結果的儲存,其父子關係的關聯;

4.控制項的反系列化;

在接下來的文章中,我將繼續就這4點展開敘述。。

如果有興趣的可以加入群裡來交流一下,群號:581523872

 

FoxOne---一個快速高效的BS架構--WEB控制項屬性編輯器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.