2015-03-18 2 views
0

Я добавляю динамический элемент управления на свою веб-страницу с помощью панели обновления. Я также создаю обработчик событий для этого динамического элемента управления. Поэтому, хотя элемент управления добавлен на веб-страницу, обработчик событий для этого элемента управления не работает.Обработчик событий для динамически добавленного элемента управления не работает

мой C# код

protected void Button1_Click(object sender, EventArgs e) 
{ 
    CheckBox cbTest = new CheckBox(); 
    cbTest.Text = "Click me for fun"; 
    cbTest.AutoPostBack = true; 
    cbTest.CheckedChanged+=new EventHandler(cbTest_CheckedChanged); 
    UpdatePanel1.ContentTemplateContainer.Controls.Add(cbTest); 
    DynamicPlaceHolder.Controls.Add(cbTest); 
} 
public void cbTest_CheckedChanged(object sender, EventArgs e) 
{ 
    TextBox1.Text = "Yes. It worked!!!"; 
} 

Мой Aspx код.

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <fieldset> 
      <legend>UpdatePanel</legend> 
      <asp:PlaceHolder ID="DynamicPlaceHolder" runat="server" ></asp:PlaceHolder> 
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
     </fieldset> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:TextBox Width="200px" runat="server" ID="TextBox1"></asp:TextBox> 

Что происходит, когда я нажимаю кнопку, установлен флажок. Однако, когда я устанавливаю флажок, панель просто обновляется, а текстовое поле не обновляется текстом «Да, это сработало !!!».

ответ

0

Во-первых, почему вы добавляете CheckBox к UpdatePanel1.ContentTemplateContainer и даже к DynamicPlaceHolder?

Так изменить его к этому:

//UpdatePanel1.ContentTemplateContainer.Controls.Add(cbTest); 
DynamicPlaceHolder.Controls.Add(cbTest); 

Вам лучше присвоению события в Page_Load:

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < DynamicPlaceHolder.Controls.Count; i++) 
    { 
     Control ctrl = DynamicPlaceHolder.Controls[i]; 
     if (ctrl is CheckBox) 
     { 
      CheckBox chk = (CheckBox)ctrl; 
      chk.CheckedChanged += new EventHandler(cbTest_CheckedChanged); 
     } 
    } 
}