C# 动态创建的文本框';s ContextChanged事件在分配ID时未触发

C# 动态创建的文本框';s ContextChanged事件在分配ID时未触发,c#,asp.net,C#,Asp.net,我阅读了所有相关帖子,但仍然无法理解当前面临的问题。在Oninit上,我创建了带有文本框的表,如下所示,当我为文本框分配id时,不会触发textchanged事件,但当我没有分配id时,会触发textchanged事件。我无法解释原因。请帮忙 protected override void OnInit(EventArgs e) { PopulateTextBoxes(); base.OnInit(e); } protected void Populat

我阅读了所有相关帖子,但仍然无法理解当前面临的问题。在Oninit上,我创建了带有文本框的表,如下所示,当我为文本框分配id时,不会触发textchanged事件,但当我没有分配id时,会触发textchanged事件。我无法解释原因。请帮忙

    protected override void OnInit(EventArgs e)
    {

    PopulateTextBoxes();
    base.OnInit(e);
    }
protected void PopulateTextBoxes()
{
    int quantityRequired = 0;
    quantityRequired =GetQuantity();
    for (int j = 0; j < quantityRequired; j++)
    {
        TableRow row = new TableRow();
        TableCell cell1 = new TableCell();
        TextBox tb = new TextBox();
        //tb.ID = j.ToString() +":RowTbx";---> this when uncommented does not fire my      tb_textChanged event while left commented the textchanged event is fired. Cant understand why? How is assigning an ID affect event Firing, I need to have the ID to further update my Db.                    
        tb.AutoPostBack = true;
        tb.TextChanged += new EventHandler(tb_TextChanged);
        cell1.Controls.Add(tb);
        row.Cells.Add(cell1);
        TableCell cell2 = new TableCell();
        CheckBox chBox = new CheckBox();
        chBox.CheckedChanged += new EventHandler(chBox_CheckedChanged);
        chBox.AutoPostBack = true;
        cell2.Controls.Add(chBox);
        row.Cells.Add(cell2);
        TableCell cell3 = new TableCell();
        Image img = new Image();
        img.Width = Unit.Pixel(25);
        img.Height = Unit.Pixel(25);
        img.ImageUrl = "HttpRuntime.AppDomainAppVirtualPath" + "/Images/" +"img.jpeg";
        cell3.Controls.Add(img);
        row.Cells.Add(cell3);
        tbl_Serial.Rows.Add(row);
    }
}
private void tb_TextChanged(object sender, EventArgs e)
{
    // TODO: Implement this method
    //throw new NotImplementedException();
}
protected override void OnInit(事件参数e)
{
populatetextboxs();
碱基.奥尼特(e);
}
受保护的void populatetextboxs()
{
int quantityRequired=0;
quantityRequired=GetQuantity();
对于(int j=0;j这在未注释时不会触发我的tb_textChanged事件,而在左侧注释时会触发textChanged事件。无法理解为什么?分配ID如何影响事件触发,我需要有ID来进一步更新我的数据库。
tb.AutoPostBack=true;
tb.TextChanged+=新事件处理程序(tb_TextChanged);
单元格1.对照组。添加(tb);
row.Cells.Add(cell1);
TableCell cell2=新的TableCell();
复选框chBox=新复选框();
chBox.CheckedChanged+=新事件处理程序(chBox\u CheckedChanged);
chBox.AutoPostBack=true;
cell2.Controls.Add(chBox);
行。单元格。添加(单元格2);
TableCell cell3=新的TableCell();
图像img=新图像();
图像宽度=单位像素(25);
img.高度=单位像素(25);
img.ImageUrl=“HttpRuntime.AppDomainAppVirtualPath”+”/Images/“+”img.jpeg”;
单元格3.控件。添加(img);
行。单元格。添加(单元格3);
tbl_序列行。添加(行);
}
}
私有void tb_TextChanged(对象发送方,事件参数e)
{
//TODO:实现此方法
//抛出新的NotImplementedException();
}

谢谢

不要将
用于
ID
。试试这个

tb.ID = j.ToString() + "_RowTbx";

您正在设置的id不是有效的控件id

参考:

仅字母数字字符和下划线的组合 字符(\)是此属性的有效值。包括空间 或其他无效字符将导致ASP.NET页分析器错误

试试这个:

tb.ID = "RowTbx" + j;

谢谢,这很有帮助。你为我节省了很多时间:)非常感谢!别忘了标出正确的答案。它可以帮助别人。谢谢,它帮助了。你为我节省了很多时间:)非常感谢!