0

当我按下按钮添加更多时,我正在尝试生成文本框,所以这是 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>
4

1 回答 1

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);
    }
}

看看它是否有效。

于 2013-06-03T18:12:25.607 回答