日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

今天你写控件了吗?----ASP.net控件开发系列(三)

發布時間:2025/7/25 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 今天你写控件了吗?----ASP.net控件开发系列(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
屬性全接觸(一)

本系列上篇文章有幾位抬愛,鼓勵了幾句,所以勁頭又足了,這不,這篇文章就出得快了,:)
希望能繼續得到鼓勵和指正。
這次我們來探討下控件開發中的屬性設計的方方面面,屬性本是各種.net下語言的最基本語法,但控件做為一種提供給程序員二次開發的發布件,其功能的強大與使用的靈活都離不開良好的屬性設計,所以我覺得屬性設計是控件開發中第一座要打下的堡壘。
首先我們來看一段.aspx文件中的HTML樣式的代碼:

<asp:DropDownList?id="DropDownList1"?runat="server"?Font-Bold="True">
?
<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);

[PersistenceMode(PersistenceMode.EnCodedInnerDefaultProperty)]
public?string?Text
{
?
}


InnerDefaultProperty 屬性保存在控件標簽對的中間,以上的DropDownList控件的Items屬性就是這樣保存的(就是那堆ListItem);

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public?ListItem?Items
{
?
get
?
{
??
?}

}


InnerProperty 屬性和其它屬性一起保存為控件標簽對中的嵌套內容,DataGrid用這種方式把一堆東西包在標簽里,這時,屬性要用標簽聲明,內含屬性值。

[PersistenceMode(PersistenceMode.InnerProperty)]
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控件开发系列(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。