自定義控制項的構建 8

2022-01-11 05:16:23 字數 3377 閱讀 4531

share

在前面的幾節基礎上,現在我們開始涉足構建物件集合的控制項,以gridview而言,其內部就包含了多個databoundfield控制項來表示所要顯示的各個列。

首先了解名為parsechildren的特性,其用來決定如何解析控制項包含的內容:值為true時,控制項所包含的內容將作為控制項的屬性解析,若該控制項包含子控制項,

則該子控制項將作為外圍控制項的屬性進行解析;當值為false時,則控制項包含的內容將獨立解析,且子控制項將不作為屬性解析。

下面則建立在parsechildren為ture和false的不同情況下的乙個自定義控制項,其功能用於頁面中隨機顯示內容。

[parsechildren(false)]
public

class rotatorscontentcontrol:webcontrol

}
protected

override

void rendercontents(htmltextwriter writer)

}
public

class content:control

上面的**中實際包含了2個控制項,content和rotatorscontentcontrol控制項,後者從其子控制項中隨機選擇乙個content控制項並呈現在瀏覽器中,

注意這裡的parsechildren值為false,如果未新增該屬性,content控制項將被當做rotatorscontentcontrol的乙個屬性來解析,這樣會產生乙個異常。

演示的關鍵**:

<

mycontrol:rotatorscontentcontrol

id="rotatorscontentcontrol1"

runat="server"

>

<

mycontrol:content

id="content1"

runat="server"

mycontrol:content

>

<

mycontrol:content

id="content2"

runat="server"

<

asp:button

id="button1"

runat="server"

text="button"

/>

mycontrol:content

>

<

mycontrol:content

id="content3"

runat="server"

>this is a banana,too!

mycontrol:content

>

mycontrol:rotatorscontentcontrol

>

如果parsechildren的值為true,則要為控制項新增乙個引用子控制項的屬性。
[parsechildren(true,"items")]
public

class itemcontrol : control

}
protected

override

void createchildcontrols()

}
public

class item : control

parsechildren的第二個引數是控制項屬性的名字,上面的**設計了乙個items屬性表示控制項所包含的控制項項。與第乙個示例不同的是,這裡itemrotator控制項

內所包含的控制項不會自動的解析成子控制項,在creatchildcontrol()執行後,該控制項僅包含乙個子控制項

演示:

<

mycontrol:itemcontrol

id="itemcontrol1"

runat="server"

>

<

mycontrol:item

id="item1"

runat="server"

>a

mycontrol:item

>

<

mycontrol:item

id="item2"

runat="server"

>b

mycontrol:item

>

<

mycontrol:item

id="item3"

runat="server"

>c

mycontrol:item

>

mycontrol:itemcontrol

>

事實上,控制項的內容可不必解析成控制項,在建立表示項集合的控制項時,也可以把項表示成物件。
public

class images

public

string text

}
[parsechildren(true, "items")]
public

class imagerotator : webcontrol

}
protected

override

void rendercontents(htmltextwriter writer)

}
}

注意這裡的細微變化,images僅僅是個類,並未從任何控制項基類繼承。可以看看介面中如何使用這個控制項的

<

mycontrol:imagerotator

id="imagerotator1"

runat="server"

>

<

mycontrol:images

text="image1"

/>

<

mycontrol:images

text="image2"

/>

<

mycontrol:images

text="image3"

/>

mycontrol:imagerotator

>

將頁面的trace開啟,可以發現其中的imagerotator1中並未包含任何子控制項

本文參考了《asp.net 3.5揭秘》

自定義控制項的構建(14)

share 在asp.net中與資料打交道接觸最多的可能就是各類資料來源控制項了,這篇在前面的基礎上構建乙個模板化的資料繫結控制項 資料繫結控制項 我們現在建立乙個繼承compositedataboundcontrol的控制項,其可以在中顯示一批資料項 和前面的內容一樣,我們首先實現乙個實現idat...

自定義控制項的構建 9

share 前面重點介紹了parsechildren特性,當其為false時,控制項的內容會自動的解析成控制項的子控制項,這時控制項內包含的所有內容都會新增到controls集合中,而控制項內任何非伺服器控制項將解析成literal控制項,某些時候可能僅允許一種控制項被新增到controls集合裡。...

自定義控制項的構建 7

share 在處理回傳事件中,還需要考慮的因素就是事件引數和選項 傳遞歸傳事件引數 前面曾提到getpostbackclienthyperlinkc 可以為其提供乙個可選引數,其在引發回傳時從瀏覽器傳到伺服器,它的值傳遞到伺服器的 raisepostbackevent 中,這裡實現的功能類似於gri...