2009-01-11 8 views
1

J'ai un champ de saisie sur ma page où l'utilisateur tape le nombre d'entrées de texte qu'il veut créer. L'action du bouton est:Créer dynamiquement des entrées de texte (ASP.net/C#)

int num_flds = int.Parse(a_fld.Text); 
for (int i = 0; i < num_flds; i++) 
{ 
    TextBox tmp = new TextBox(); 
    tmp.ID = "answer_box" + i; 
    tmp.Width = Unit.Pixel(300); 
    answer_inputs.Controls.Add(tmp); 
} 

Maintenant, j'ai un autre bouton que l'utilisateur cliquait après avoir rempli toutes les zones de texte dynamiquement créés. Des questions, tout d'abord, est-ce que je crée dynamiquement les zones de texte au bon endroit? Comment extraire les valeurs des zones de texte créées dynamiquement? (Les zones de texte créées dynamiquement sont ajoutées au panneau "answer_inputs"

Répondre

2

Je recommande de lire this et d'autres articles sur les contrôles créés de manière dynamique, mais ce n'est pas aussi simple que vous le pensez. sont des questions importantes du cycle de vie de la page à considérer

2

Lors de la création des contrôles web de façon dynamique, je trouve préférable d'avoir les contrôles eux-mêmes un rapport dans les réponses que vous pouvez y arriver comme ceci:..

créer quelque chose dans votre classe page pour stocker les valeurs:

private readonly Dictionary<TextBox, string> values=new Dictionary<TextBox, string>(); 

Faire une méthode pour agir comme un rappel pour les zones de texte lorsque leur valeur change:

void tmp_TextChanged(object sender, EventArgs e) 
    { 
     TextBox txt = sender as TextBox; 
     if(txt!=null) 
     { 
      values.Add(txt,txt.Text); 
     } 
    } 

puis ajoutez cette méthode pour chaque zone de texte comme ils sont ajoutés:

int num_flds; 
    if(!int.TryParse(a_fld.Text,out num_flds)) 
    { 
     num_flds = 0; 
    } 
    for (int i = 0; i < num_flds; i++) 
    { 
      TextBox tmp = new TextBox(); 
      tmp.ID = "answer_box" + i; 
      tmp.Width = Unit.Pixel(300); 
      answer_inputs.Controls.Add(tmp); 
      tmp.TextChanged += tmp_TextChanged; 
    } 

Enfin, vous itérer à travers le dictionnaire sur le rappel pour voir si elle contient des valeurs. Faites ceci dans la méthode OnPreRender par exemple.

Éditer: Il y a un problème avec ceci, si le nombre de champs de texte est diminué à la publication. Un moyen sûr de recréer les champs de texte précédents sur la publication doit être utilisé.

Questions connexes