3 votes

Ajouter un contrôle à Page.Controls dans le code du contrôle serveur

Je veux ajouter un champ caché à Page.Controls dans le code du contrôle serveur, mais j'ai une exception "La collection de contrôles ne peut pas être modifiée pendant les phases de DataBind, Init, Load, PreRender ou Unload." Comment résoudre ce problème?

public class MyServerControl: Control
{
  HiddenField hf = new HiddenField{ID="hf"};
  protected override void OnInit(EventArgs e)
  {
    ...
    Page.Controls.Add(hf);
  }
}

1voto

Jaime Torres Points 5955

Vous devez écouter l'erreur qui est lancée. Vous pouvez ajouter le contrôle soit à un conteneur existant (par ex. Panel) ou utiliser un PlaceHolderControl pour son but prévu.

Le problème avec l'ajout dynamique des contrôles (surtout pour les postbacks) est que le ViewState n'est pas très intelligent, et charge les contrôles dans l'ordre. À moins que vous n'ajoutiez le contrôle tout à la fin, vous pourriez vous retrouver avec un ViewState invalide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X