2009-07-10 3 views
0

je crée de certains textbox dynamique et un bouton dans un espace réservé et souhaitez enregistrer les informations sur le bouton de zone de texte lorsque l'utilisateur clique, mais ne savez pas comment récupérer les données de la zone de texteComment puis-je lire une dynamique créé textbox

LiteralControl spacediv3 = new LiteralControl("&nbsp&nbsp"); 
Label lblComText = new Label(); 
lblComTitle.Text = "Comment"; 
TextBox txtComment = new TextBox(); 
txtComment.Width = 200; 
txtComment.TextMode = TextBoxMode.MultiLine; 
phBlog.Controls.Add(lblComText); 
phBlog.Controls.Add(spacediv3); 
phBlog.Controls.Add(txtComment); 

Button btnCommentSave = new Button(); 
btnCommentSave.ID = "mySavebtnComments" ; 
btnCommentSave.Text = "Save "; 
phBlog.Controls.Add(btnCommentSave); 
btnCommentSave.CommandArgument = row["ID"].ToString(); 
btnCommentSave.Command += new CommandEventHandler(btnSave_Click); 

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text 
} 

Répondre

1

vous devez obtenir une référence à votre contrôle btnSave_Click. Quelque chose comme:

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    var btn = (Button)sender; 
    var container = btn.NamingContainer; 
    var txtBox = (TextBox)container.FindControl("txtComment"); 
    firstelement.InnerText = txtBox.text // this gives error on txtComment.text 
} 

Vous devez également définir l'ID sur txtComment et recréer tous les contrôles créés dynamiquement à la publication.

0

Vous aurez besoin d'un mécanisme pour créer une relation entre le bouton et le TextBox évidemment. Dans winforms ce serait facile, où chaque contrôle a une propriété Tag, qui peut contenir une référence à peu près n'importe quoi. Les contrôles web n'ont pas une telle propriété (que je connais), mais il est toujours facile de maintenir de telles relations. Une approche serait d'avoir Dictionary dans la page de stockage des relations bouton/zone de texte:

private Dictionary<Button, TextBox> _buttonTextBoxRelations = new Dictionary<Button, TextBox>(); 

Lorsque vous créez les boutons de commande et TextBox, vous les insérez dans le dictionnaire:

TextBox txtComment = new TextBox(); 
// ... 

Button btnCommentSave = new Button(); 
// ... 
_buttonTextBoxRelations.Add(btnCommentSave, txtComment); 

... et alors vous pouvez rechercher la zone de texte dans le cas de clic du bouton:

protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    TextBox commentTextBox = _buttonTextBoxRelations[(Button)sender]; 
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text 
} 
0

Ajouter un 'ID' à la zone de texte

txtComment.ID = "txtComment" 

demande les informations du formulaire soumis (à condition que vous avez un formulaire sur la page)

comment = Request.Form("txtComment") 
0

Essayez pendant postback à charger txtComment (avec le même ID) dans la méthode LoadViewState substituée après l'appel de base.LoadViewState. Dans ce cas, vous le chargez avant que les données de publication soient traitées et que le contrôle txtComment soit chargé.

Questions connexes