TextChanged并不会触发

时间:2013-06-03 17:52:18

标签: c# asp.net textbox textchanged

当我按下按钮添加更多时,我正在尝试生成文本框,所以这是onclick的代码

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 个答案:

答案 0 :(得分: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);
    }
}

看看它是否有效。