Обработчик событий не запускается для динамически созданных элементов управления - PullRequest
9 голосов
/ 21 ноября 2008

У меня проблема с динамически создаваемым TextBox.

Когда TextBox создается в PageLoad, происходит событие TextChanged.
Но когда я динамически удалял и заново создавал TextBox, TextChanged не запускался.

Это код:

.aspx file

<body>
    <form id="form1" runat="server">
    <div>

    <asp:Table ID="Table1" runat="server">
      <asp:TableRow>
        <asp:TableCell ColumnSpan="2">Fixed content</asp:TableCell>
      </asp:TableRow>
    </asp:Table>   
    </form>
</body>

.cs file

public partial class test : System.Web.UI.Page
{
  string myText = "a";

  protected void Page_Load(object sender, EventArgs e)
  {
    WriteRows();
  }

  private void WriteRows()
  {
    TableRow tr = new TableRow();

    TableCell tc = new TableCell();
    TextBox txt = new TextBox();
    txt.Text = myText;
    txt.TextChanged += new EventHandler(txt_TextChanged); // Assign event handler
    tc.Controls.Add(txt);
    tr.Controls.Add(tc);

    tc = new TableCell();
    tc.Text = txt.Text;
    tr.Controls.Add(tc);

    Table1.Controls.AddAt(1, tr);
  }

  private void txt_TextChanged(object sender, EventArgs e)
  {
    myText = ((TextBox)sender).Text;
    RedrawTable(); // Delete the row (incl. the TextBox) and rewrite it
  }

  private void RedrawTable()
  {
    Table1.Controls.RemoveAt(1);
    WriteRows();
  }
}

У кого-нибудь есть решение, чтобы событие всегда срабатывало?

Ответы [ 11 ]

0 голосов
/ 21 ноября 2008

Когда я исследовал эту проблему, это было в контексте динамических меню, и есть множество ответов Google, которые вместе помогли мне пройти через это (потому что это достаточно распространенное требование, я думаю). у меня нет краткого ответа, но это может быть полезным для начала (например, Google для динамических меню .NET). На этом сайте тоже есть несколько вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...