share
在前面的幾節基礎上,現在我們開始涉足構建物件集合的控制項,以gridview而言,其內部就包含了多個databoundfield控制項來表示所要顯示的各個列。
首先了解名為parsechildren的特性,其用來決定如何解析控制項包含的內容:值為true時,控制項所包含的內容將作為控制項的屬性解析,若該控制項包含子控制項,
則該子控制項將作為外圍控制項的屬性進行解析;當值為false時,則控制項包含的內容將獨立解析,且子控制項將不作為屬性解析。
下面則建立在parsechildren為ture和false的不同情況下的乙個自定義控制項,其功能用於頁面中隨機顯示內容。
[parsechildren(false)]
publicclass rotatorscontentcontrol:webcontrol
}
protectedoverride
void rendercontents(htmltextwriter writer)
}
publicclass 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
>
如果parsechildren的值為true,則要為控制項新增乙個引用子控制項的屬性。mycontrol:rotatorscontentcontrol
>
[parsechildren(true,"items")]
publicclass itemcontrol : control
}
protectedoverride
void createchildcontrols()
}
publicclass 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
>
publicclass images
publicstring text
}
[parsechildren(true, "items")]
publicclass imagerotator : webcontrol
}
protectedoverride
void rendercontents(htmltextwriter writer)
}
}
注意這裡的細微變化,images僅僅是個類,並未從任何控制項基類繼承。可以看看介面中如何使用這個控制項的
<mycontrol:imagerotator
id="imagerotator1"
runat="server"
>
<mycontrol:images
text="image1"
/>
<mycontrol:images
text="image2"
/>
<mycontrol:images
text="image3"
/>
將頁面的trace開啟,可以發現其中的imagerotator1中並未包含任何子控制項mycontrol:imagerotator
>
本文參考了《asp.net 3.5揭秘》
自定義控制項的構建(14)
share 在asp.net中與資料打交道接觸最多的可能就是各類資料來源控制項了,這篇在前面的基礎上構建乙個模板化的資料繫結控制項 資料繫結控制項 我們現在建立乙個繼承compositedataboundcontrol的控制項,其可以在中顯示一批資料項 和前面的內容一樣,我們首先實現乙個實現idat...
自定義控制項的構建 9
share 前面重點介紹了parsechildren特性,當其為false時,控制項的內容會自動的解析成控制項的子控制項,這時控制項內包含的所有內容都會新增到controls集合中,而控制項內任何非伺服器控制項將解析成literal控制項,某些時候可能僅允許一種控制項被新增到controls集合裡。...
自定義控制項的構建 7
share 在處理回傳事件中,還需要考慮的因素就是事件引數和選項 傳遞歸傳事件引數 前面曾提到getpostbackclienthyperlinkc 可以為其提供乙個可選引數,其在引發回傳時從瀏覽器傳到伺服器,它的值傳遞到伺服器的 raisepostbackevent 中,這裡實現的功能類似於gri...