单击复合控件内的按钮时,不会触发Repeater ItemCommand

时间:2012-12-12 13:57:25

标签: c# asp.net repeater composite-controls

我有一个Repeater包含嵌套的自定义CompositeControl控件,其中包含以下方式:

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。当我点击其中任何一个时,ItemCommand Repeater事件都不会被调用。如果我将按钮向右移动到ItemTemplate,它就可以正常工作。但我需要把它们留在原地。

在控制层次结构中冒泡它们的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以让控件抛出您的页面(使用转发器)可以侦听的事件。初始化每个控件时,可以提供事件所需的任何信息。

答案 1 :(得分:1)

这些控件在ItemTemplate之外..因此它们实际上无法触发ItemCommand。

ItemCommand具有特定属性,如果它们位于ItemTemplate之外(例如ItemIndex,用于确定所单击项目的索引),则按钮将无法使用这些属性