今天你写控件了吗?----ASP.net控件开发系列(三)
屬性全接觸(一)
本系列上篇文章有幾位抬愛,鼓勵了幾句,所以勁頭又足了,這不,這篇文章就出得快了,:)
希望能繼續得到鼓勵和指正。
這次我們來探討下控件開發中的屬性設計的方方面面,屬性本是各種.net下語言的最基本語法,但控件做為一種提供給程序員二次開發的發布件,其功能的強大與使用的靈活都離不開良好的屬性設計,所以我覺得屬性設計是控件開發中第一座要打下的堡壘。
首先我們來看一段.aspx文件中的HTML樣式的代碼:
?<asp:ListItem?Value="1">1</asp:ListItem>
?<asp:ListItem?Value="2">2</asp:ListItem>
</asp:DropDownList>
?
這種代碼大家都寫過無數次了,不過,現在我們要從另一種角度來分析這段代碼:
DropDownList控件在和用戶交互時,它沒有把它的屬性一股腦放在一起來表示出來,而是分為以下幾種情況:
1.像ID、Runat、Font-Bold這些,放在<>標記里;
2.Font-Bold不同于其它,它有一個短橫分隔成兩部分,這種表示方式不是Font-Bold是一個屬性的名稱,而是說明它是一個子屬性,是Font屬性(Font類)的Bold屬性,對應.cs文件的寫法是:Font.Bold;
3.ListItem放在了DropDownList的一雙<>標記的中間,而不是標記之類,同樣1、2也放在了ListItem的中間。
下面我們來分別看看這幾種屬性記錄方式是怎么實現的。
有一個Attribute來做這件事件PersistenceMode(System.Web.UI.PersistenceModeAttribute)。
它有以下幾個值供選擇:
Attribute(default)屬性保存在控件的標簽里;默認值
EnCodedInnerDefaultProperty 屬性是編碼的HTML,放在控件標簽對的中間保存,以上的ListItem就是這樣保存Text屬性的(1、2);
public?string?Text
{
?
}
InnerDefaultProperty 屬性保存在控件標簽對的中間,以上的DropDownList控件的Items屬性就是這樣保存的(就是那堆ListItem);
public?ListItem?Items
{
?get
?{
??
?}
}
InnerProperty 屬性和其它屬性一起保存為控件標簽對中的嵌套內容,DataGrid用這種方式把一堆東西包在標簽里,這時,屬性要用標簽聲明,內含屬性值。
public?virtual?TableItemStyle?ItemStyle
{
??????get
??????{
????????????.
??????}
}
第二個議題,屬性的持久性
眾所周知,網頁是基于無狀態機制的,就是說,頁面Response后就不管理保存頁面內容的狀態,ASP.net提供ViewState機制來保存頁面的狀態,ViewState是實現方式是送出頁面中的一個名為__ViewState的input type='hidden',也就是說它和Session不同,它保存在頁面中......不廢話了,反正我們要保存控件的狀態(就是它的各個屬性),而不至于在回傳的過程中丟失,我們采用的方案就是ViewState,下面簡單的舉個例子說明ViewState在Property中的用法
??DefaultValue(2),
??TypeConverter(typeof(Int32Converter)),
??Category("Behavior"),
??Description("Duration?of?complete?once?transition.(s)")?
??]
??public?int?Duration
??{
???get
???{
????object?b?=?ViewState["Duration"];
????return?(b==null)?2:(int)b;
???}
???set
???{
????if(value?<?1)
????{
?????throw?new?ArgumentOutOfRangeException("Duration");
????}
????ViewState["Duration"]?=?value;
???}
??}
像這種方式直接使用ViewState是最簡便的,我們不必改寫LoadViewState、SaveViewState方法,至于怎么自定義ViewState管理,在后面的文章中將有介紹。
關于屬性的東西太多了,這次就寫到這,下篇將寫寫怎樣訂制屬性與IDE的交互。
轉載于:https://www.cnblogs.com/think/archive/2005/05/10/152147.html
總結
以上是生活随笔為你收集整理的今天你写控件了吗?----ASP.net控件开发系列(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速清除SQL Server数据库日志的
- 下一篇: 也许是被忽略的update语句