动态添加到中继器的控件在嵌套时不会引发回发事件

问题描述

在 asp:Repeater 中动态添加 asp:Button 时,我看到了一个我似乎无法解决的奇怪行为。

如果我将 Button 添加到面板 uiHolder注册 Click 事件,它会在 PostBack 上工作。但是,如果我将按钮添加到嵌套面板 uinestedHolder 中,则不会触发该事件。

在这里遗漏了一些基本的东西吗?

<asp:Repeater ID="uiRepeater" OnItemCreated="uiRepeater_ItemCreated" runat="server">
    <ItemTemplate>

        <asp:Panel ID="uiHolder" style="background-color: red;" runat="server">
            <asp:Panel ID="uinestedHolder" style="background-color: green;" runat="server">
            </asp:Panel>
        </asp:Panel>

    </ItemTemplate>
</asp:Repeater>   
protected void Page_Load(object sender,EventArgs e)
{
    if (!IsPostBack)
    {
        uiRepeater.DataSource = new[] { 1 };
        uiRepeater.DataBind();
    }
}

protected void uiRepeater_ItemCreated(object sender,RepeaterItemEventArgs e)
{
    var holder = (Panel)e.Item.FindControl("uiHolder"); // Click event fires on postback
    holder = (Panel)e.Item.FindControl("uinestedHolder"); // Click event does not fire on postback

    var xx = new System.Web.UI.WebControls.Button();
    xx.ID = "uiButton";
    holder.Controls.Add(xx);
    xx.Text = "DYNAMIC " + xx.ClientID;
    xx.Click += uiClickMe_Click;
}

protected void uiClickMe_Click(object sender,EventArgs e)
{
    Response.Write("I FIRED");
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)