未找到动态创建的文本框

时间:2010-01-15 09:42:31

标签: c# asp.net

我使用此方法在tablecell中插入文本框

protected void EditAttivitaClick(object sender, EventArgs e)
    {
        string attivitaID = ((ImageButton)sender).ID.Split('_')[2];
        tableCell =(HtmlTableCell)FindControl("AttivitaDescrizione_" + attivitaID);                
        TextBox txt = new TextBox();
        txt.Text = tableCell.InnerHtml;
        txt.ID = "TxtAttivitaDescrizione_" + attivitaID;
        tableCell.InnerHtml = "";

    }

它正常工作。 这个函数用于保存db文本框的值:

protected void SalvaAttivitaClick(object sender, EventArgs e)
    {
        string attivitaID = ((ImageButton)sender).ID.Split('_')[2];
        TextBox txt = (TextBox)FindControl("TxtAttivitaDescrizione_" + attivitaID);
        string a = txt.Text;        
        attivitaTableAdapter.UpdateID(txt.Text, Int32.Parse(attivitaID));
        tableCell.Controls.Clear();
        tableCell.InnerHtml = a;
}

但它不起作用。因为它没有找到之前创建的文本框。

我在文件aspx中也放了EnableViewState =“true”。

为什么?

2 个答案:

答案 0 :(得分:2)

每次重新加载页面时都需要创建文本框,这包括回发。

有关详细信息,请参阅asp.net page lifecycle - 您应该在Page.Init事件中创建动态控件,以便稍后可用。

答案 1 :(得分:0)

如果您知道TextBox ID,则可以从Form集合中检索值,如果您只需要提交的值,这将节省您不必要地重新创建控件:

string attivitaID = ((ImageButton)sender).ID.Split('_')[2];
if(Request.Form["TxtAttivitaDescrizione_" + attivitaID] != null)
{
        string a = Request.Form["TxtAttivitaDescrizione_" + attivitaID];        
        attivitaTableAdapter.UpdateID(a, Int32.Parse(attivitaID));
        tableCell.Controls.Clear();
        tableCell.InnerHtml = a;

}