Je ne sais pas si cela s'applique à toutes les versions de .Net (je pense 2.0 ou ultérieur) mais il existe une méthode appelée CreateChildControls qui ne fait pas vraiment partie du cycle de vie, elle est appelée à chaque fois que la méthode EnsureChildControls est appelé. Par défaut, il est appelé avant PreRender s'il ne s'agit pas d'une publication. Donc, fondamentalement votre code ressemblerait à ceci:
public class SomeControl : WebControl, INamingContainer
{
private TextBox someTextBox;
protected override void CreateChildControls()
{
base.CreateChildControls();
someTextBox= new TextBox();
someTextBox.ID = "tbxMain";
Controls.Add(textboxToCheck);
}
}
Maintenant, la partie à ne pas est que si vous appelez EnsureChildControls, vous ne pouvez pas être sûr à 100% que les contrôles existent avant que les propriétés publiques sur votre contrôle sont remplies par la charge ViewState. Qu'est-ce que ça veut dire? Eh bien prendre le code d'avant et d'ajouter une propriété pour la CssClass:
public class SomeControl : WebControl, INamingContainer
{
private TextBox someTextBox;
protected override void CreateChildControls()
{
base.CreateChildControls();
someTextBox= new TextBox();
someTextBox.ID = "tbxMain";
Controls.Add(textboxToCheck);
}
public String CssClass { get; set; }
}
En CreateChildControls vous ne voudrez pas ceci:
someTextBox.CssClass = CssClass;
Comme il n'y a aucun moyen d'être sûr que le contrôle existe encore.Il y a quelques façons que vous pouvez manipuler ceci:
Chaîne CssClass publique {{ se EnsureChildControls(); return someTextbox.CssClass; }
set
{
EnsureChildControls();
someTextbox.CssClass = value;
}
Dans cet exemple, je fais appel EnsureChildControls (En supposant que vous réglez l'cssValue sur la zone de texte dans la méthode CreateChildControls) et de fixer ou de la zone de texte.
Une autre façon est de mettre tout ce qui dépend des propriétés publiques du contrôle dans la méthode OnPreRender:
protected override void OnPreRender(EventArgs e)
{
someTextbox.CssClass = CssClass;
}
Ainsi éviter le désordre de se soucier de la propriété étant rempli déjà pendant la charge ViewState.
One Note:
L'utilisation de INamingContainer peut être important. Fondamentalement, tout ce qui fait est de s'assurer que les contrôles sur le contrôle parent ont un identifiant qui est unique sur la page en appliquant le nom du parent (Et peut-être plus) à l'id. Fondamentalement, si l'ID parent est Parent et que l'ID de contrôle enfant est Child, l'ID peut apparaître en tant que Parent_Child. Cela résoudra des problèmes avec ViewState ne peuplant pas les propriétés correctement ou pas du tout.
Salut, c'est correct. – Owen
Si vous utilisez des formulaires Web, RUN DO WALK et lisez sur les cycles de vie dans ASP.NET. Vous sauvera beaucoup de chagrin d'amour. – Will