2012-12-12 57 views
1

內部的按鈕時ItemCommand不觸發我有一個包含嵌套自定義CompositeControl控制以下列方式一Repeater中繼點擊複合控制

Wrapper

  • Head
  • Body
<asp:UpdatePanel ID="noteArea" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server" > 
    <ContentTemplate> 
     <asp:Repeater ID="noteRepeater" runat="server" EnableViewState="true" OnItemDataBound="noteRepeater_ItemDataBound" OnItemCommand="noteRepeater_ItemCommand"> 
      <ItemTemplate> 
       <asp:Button runat="server" CommandName="edit" ID="testButton" /> 
       <easit:NoteControl ID="noteControl" runat="server" /> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Head控件包含兩個Buttons。當我點擊其中任何一個時,事件Repeater不會被調用。如果我將按鈕向右移動到ItemTemplate,它可以工作。但我需要保持他們在哪裏。

什麼是正確的方式來控制他們的控制層次?

回答

3

您可以控制拋出一個事件,將不會提供給你的按鈕特定的屬性,其你的頁面(帶中繼器)可以聽。當初始化每個控件時,可以提供您需要的任何事件信息。

+0

嗨,我試過這樣做,但遇到了另一個問題。流程永遠不會到達我爲按鈕點擊定義的事件處理程序,即使我在包含它的控件中綁定了「OnInit」。我懷疑這是因爲它的父控制創建了它的控制結構'OnPreRender',但是如果我嘗試將它移動到'OnLoad'或'OnInit','Repeater'顯示爲空。 –

+0

這是因爲按鈕事件處理程序不會捕獲該事件,中繼器駐留的頁面將處理它。使按鈕捕捉事件的唯一原因是能夠獲取關於哪個元素被點擊的信息。正如我在我的回答中所述,您可以將UC所需的任何信息傳遞給UC以處理事件。那有意義嗎? –

+0

@AlexandarŽivkovič:謝謝先生。這一切都適合你嗎?還有其他問題嗎? –

1

這些控件位於ItemTemplate外部,所以它們確實無法觸發ItemCommand。

的ItemCommand有,如果他們是ItemTemplate中以外(的ItemIndex例如,確定點擊項目的索引)

+0

但'Wrapper'控件在'ItemTemplate'中定義。這是否意味着它的子控件不在它之內? –