2010-01-15 43 views
0

我用這個方法在一個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

您需要在每次重新加載頁面時創建文本框,這包括回發。

有關更多信息,請參閱asp.net page lifecycle - 您應該在Page.Init事件中創建動態控件,以便稍後提供。

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; 

}