Repeater中的按钮不会引发事件

时间:2010-08-18 08:28:41

标签: c# asp.net ajax repeater

当我使用选项卡Ajax控件时,在一个选项卡中,我有一个Repeater: <asp:Repeater runat="server" ID="rp1" onitemcommand="rp1_ItemCommand">和受保护的void rp1_ItemCommand(object source, RepeaterCommandEventArgs e)方法,我添加了一个按钮,它的事件是:

Button btn = new Button();
btn.Text = "Update";
btn.Click += new EventHandler(btn_Click);
((Repeater)source).Items[0].Controls.Add(btn);

void btn_Click(object sender, EventArgs e)
{
    Response.Redirect("http://google.com");
}

但是,当我点击更新按钮时,不会引发事件。

1 个答案:

答案 0 :(得分:0)

回发后,必须构建控制树以匹配树,否则如果无法在控制树中找到该按钮,则不会触发事件。这可能是因为您在代码隐藏中手动添加按钮所发生的情况。是否有任何特殊原因导致您无法在模板中使用它,即:

<asp:Repeater runat="server">
       <ItemTemplate>
           <asp:Button runat="server" OnClick="btn_Click" Text="Update" Visible="false" />
       </ItemTemplate>
   </asp:Repeater>

然后ViewState会为你处理它。

编辑:重新阅读您的问题:)也许您只需更改ItemCommand上按钮的可见性,而不是添加它,因为它在您的控制树中(即,如果您添加它)到模板)。和/或如果您只有“一个”按钮(((Repeater)source).Items[**0**].Controls.Add(btn);),为什么不首先在外面转发器?