J'ai ce problème étrange lorsque vous placez des zones de texte sur la page à l'envers. L'ensemble du système d'événements est foiré. La modification d'une zone de texte déclenche TextChange sur toutes les zones de texte. Je peux résoudre ce problème en plaçant d'abord les commandes dans une liste, puis en appelant la commande add tout en parcourant la liste à l'envers. Mais je veux juste savoir pourquoi cela échoue. Heres un code (.net 2,0)ASP.NET mettre des contrôles dynamiques sur la page en inversant les événements
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
InitFields();
}
private void InitFields()
{
int nrFields;
//We have a static textbox called nrElements, this determines the number
//of fields to initialize
if (int.TryParse(nrElements.Text, out nrFields))
{
//Put all the dynamic fields on the screen in reverse order
foreach(Control t in GetDynamicFields(nrFields))
{
//Calling Controls.Add works fine
//Calling Controls.AddAt messes up the events
//Try changing different textboxes
plhFields.Controls.AddAt(0, t);
}
}
}
private IEnumerable<Control> GetDynamicFields(int nrFields)
{
for (int i = 0; i < nrFields; i++)
{
TextBox txtBox = new TextBox();
txtBox.ID = string.Format("dynTextBox{0}", i.ToString());
txtBox.AutoPostBack = true;
txtBox.TextChanged += t_TextChanged;
yield return txtBox;
}
}
private void t_TextChanged(object sender, EventArgs e)
{
TextBox txtBox = sender as TextBox;
if (txtBox != null)
txtBox.Text = txtBox.Text + "Changed ";
}
}
Les commandes I chargées dépendent de l'entrée de l'utilisateur dans une autre zone de texte. La valeur de la zone de texte (userinput) n'est pas chargée lors de l'exécution de PreInit. La même chose est vraie pour CreateChildControls. –