2010-01-15 6 views
0

J'utilise cette méthode pour insérer une zone de texte dans un TableCellzone de texte créé dynamiquement introuvable

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 = ""; 

    } 

Il fonctionne correctement. Et cette fonction pour l'enregistrement dans db la valeur de la zone de texte:

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

Mais cela ne fonctionne pas. Parce qu'il ne trouve pas la zone de texte créée précédemment.

J'ai aussi mis EnableViewState = "true" dans le fichier aspx.

Pourquoi?

Répondre

2

Vous devez créer la zone de texte chaque fois que la page est rechargée, ceci inclut la publication. Pour plus d'informations, consultez la page asp.net page lifecycle. Vous devez créer vos contrôles dynamiques dans l'événement Page.Init afin qu'il soit disponible ultérieurement.

0

Si vous connaissez l'ID TextBox vous pouvez récupérer la valeur de la collection de formulaire, cela vous évitera de devoir recréer le contrôle inutilement si vous avez besoin de la valeur soumise:

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; 

} 
Questions connexes