Axi*_*ili 9 .net asp.net events
我有动态创建TextBox的问题.
在PageLoad中创建TextBox时,会触发TextChanged事件.
但是当我动态删除并重新创建TextBox时,TextChanged没有被触发.
这是代码:
.aspx文件
<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>
Run Code Online (Sandbox Code Playgroud)
.cs文件
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();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有解决方案,以便始终触发事件?
Buu*_*yen 12
ASP.NET通过匹配控件的ID和请求参数来完成事件处理.在您的情况下,在txtTextChanged()期间创建的TextBox将具有自动ID,因为您没有指定任何显式ID.该ID将在文本更改事件期间回发.
在页面加载事件之后,ASP.NET将尝试查找具有此类ID的控件以为其触发事件.显然,ASP.NET将无法找到匹配项,因为在Page_Load()期间创建的TextBox是不同的,并且具有不同的ID.
要解决此问题:为文本框指定显式ID:
TextBox txt = new TextBox();
txt.Text = myText;
txt.ID = "txtBox";
Run Code Online (Sandbox Code Playgroud)