2010-10-12 70 views
0

我從來沒有創建一個自定義的控制,所以除非考慮到這一點,這裏是我的問題:開發使用嵌套中繼器自定義Asp.net控制

是否有可能創建一個嵌套的中繼器的自定義控制?

的用法是這樣的:

<tag:NestedRepeater id="foo" runat="server" levels="6"/> 

我現在有相互嵌套的6個相同的中繼器。然後我使用ItemDataBound事件來綁定綁定其子的孩子。在自定義控件中如何發生這種事件鏈?我希望能夠擁有一個引用自身的中繼器模板。那可能嗎?

在試圖做這件事之前,有什麼明顯的我可以忽略或應該知道嗎?

回答

1

這當然是可能的,也很簡單 - 您必須創建一個模板控件來接受頁眉,頁腳和項目模板。這就是我要做的

  1. 從Repeater繼承我的控制它自我,這樣我就不必爲模板屬性提供代碼。

  2. 添加其他屬性,如級別。還要添加一個屬性,如NestedPlaceholderId,它會告訴我容器控制標識在哪兒嵌套子中繼器。

  3. 覆蓋諸如OnItemDataBound的方法以防止提高默認ItemDataBoundEvent。我的實現會引發一個自定義事件(比如NestedItemDataBound),它將通過事件參數屬性傳遞當前的嵌套級別。期望消費者通過事件參數屬性發送適當的數據源。

  4. 如果消費者提供數據源,然後使用NestedPlaceholderId來找到給定項目中的佔位符。創建新的嵌套中繼器並將其添加到佔位符,將其模板設置爲與當前模板相同,設置其事件處理程序,以便您可以對ItemDataBound事件進行冒泡並最終設置數據源並將其綁定。

所以,你可以使用語法使用控制等

<tag:NestedRepeater id="foo" runat="server" levels="6" NestedPlaceholderId="Nested"> 
    <ItemTemplate> 
    <p> 
      <span>[some data binding expression]</span> 
      <div class="nested"> 
       <asp:PlaceHolder runat="server" ID="Nested" /></li> 
      </div> 
     </p> 
    </ItemTemplate> 
</tag:NestedRepeater>