Кнопка в репитере не вызывает событие - PullRequest
0 голосов
/ 18 августа 2010

Когда я работаю с вкладкой 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 голосов
/ 18 августа 2010

После обратной передачи ваше дерево управления должно быть построено так, чтобы оно совпадало с деревом, в противном случае событие не сработает, если не может найти кнопку в дереве управления.Это, вероятно, то, что происходит, так как вы вручную добавляете кнопку в коде позади.Есть ли какая-то особая причина, по которой вы не можете использовать его в шаблоне, например ::1001*

<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);), почему бы не установить ее вне повторителя?

...