2013-06-03 3 views
0

Я пытаюсь создать текстовые поля, когда нажать на кнопку добавить больше, это код OnClickTextChanged не срабатывает

protected void Add_TextBoxes(object sender, EventArgs e) 
     { 
      int index = int.Parse(ViewState["pickindex"].ToString()); 
      TextBox MyTextBox = new TextBox(); 
      MyTextBox.ID = "tbautogenerated"+index.ToString(); 
      MyTextBox.Text = "tbautogenerated" + index.ToString(); 
      MyTextBox.Width= 250; 
      MyTextBox.MaxLength = 128; 
      MyTextBox.Attributes.Add("runat", "server"); 
      MyTextBox.CausesValidation = false; 
      MyTextBox.AutoPostBack = true; 
      MyTextBox.TextChanged += new EventHandler(MyTextBox_TextChanged); 
      picktexts.Controls.Add(MyTextBox); 

     } 

void MyTextBox_TextChanged(object sender, EventArgs e) 
    { 
     TextBox MyTextBox = sender as TextBox; 
    } 

, но когда я изменяю в текстовом поле TextChanged не работает !! ! что не так ?

HTML код

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
       <ContentTemplate> 
        <div id="picktexts" runat="server"> 
        <asp:TextBox ID="txtAdress" runat="server" MaxLength="128" Width="250" /> 
        <asp:RequiredFieldValidator ControlToValidate="txtAdress" Display="Dynamic" ID="rfvAddress" Text="* Required" runat="server" /> 
        <asp:Button ID="bt_addtxtbox" runat="server" Text="Add more" OnClick="Add_TextBoxes" CausesValidation="false" /> 
        </div> 
        </ContentTemplate> 
        </asp:UpdatePanel> 
+1

Добавить точку останова, чтобы убедиться, что она выполняет эту часть. –

+2

Появляются новые текстовые поля, но не подписываются на событие с измененным текстом? –

+0

Что значит, не работает? Ожидаете ли вы, что событие будет срабатывать при вводе текста в текстовое поле? Потому что, если это так, оно должно срабатывать только между сообщениями по умолчанию. – Renan

ответ

0

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

Попробуйте снова связать обработчики событий во время загрузки страницы. Например:

void Page_Load (object sender, EventArgs e) 
{ 
    foreach (Control c in picktexts.Controls) 
    { 
     ((TextBox)c).TextChanged += new EventHandler(MyTextBox_TextChanged); 
    } 
} 

И посмотрите, работает ли оно.

+0

Я использую двойной обмен текстами HTML. Но картил должен, по крайней мере, видеть событие обратной связи, когда фокус меняется. – Yogee

+0

Я видел событие post back, когда фокус изменился, но я не могу получить текстовое поле из кибертекстов, это null! – kartal

+1

Как сказал Ренан, ViewState будет воссоздан на каждом посту. Можете ли вы сослаться на ссылку, которую я поделил в своем комментарии на ваш вопрос (комментарий ниже 10-го)? – Yogee