Evénements ASP: un petit quizz
Par amethyste le Avr 1, 2007 | Dans focus | 3 retours »
Les lecteurs de mon dernier article sur les événements ASP devraient
maintenant être plus à l'aise avec le sujet. Alors voici pour eux un petit
quizzz.
Examinez le code du composant suivant, il affiche un Label et un TextBox:
[Designer(typeof(LabelDesigner))] public class MonLabel : WebControl, IPostBackDataHandler { #region CreateChildControls protected override void CreateChildControls() { this.Controls.Clear(); Label Label = new Label(); Label.Attributes.Add("name", this.UniqueID + "_label"); Label.Text = this.Description; Controls.Add(Label); TextBox TextBox = new TextBox(); TextBox.Text = this.Texte; TextBox.Attributes.Add("name", this.UniqueID); this.Controls.Add(TextBox); } #endregion #region Description /// <summary> /// /// </summary> [Category("Appeareance"), DescriptionAttribute("Description")] public String Description { [DebuggerStepThrough] get { if (this.ViewState["Description"] == null) { // valeur par défaut return default(String); } return (String)this.ViewState["Description"]; } [DebuggerStepThrough] set { this.ViewState["Description"] = value; } } #endregion #region Texte /// <summary> /// /// </summary> [Category("Data"), DescriptionAttribute("Description")] public String Texte { [DebuggerStepThrough] get { if (this.ViewState["Texte"] == null) { // valeur par défaut return default(String); } return (String)this.ViewState["Texte"]; } [DebuggerStepThrough] set { this.ViewState["Texte"] = value; } } #endregion public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) { this.Texte = postCollection[this.UniqueID]; return false; } public void RaisePostDataChangedEvent() { throw new Exception("The method or operation is not implemented."); } } public class LabelDesigner : ControlDesigner { public override string GetDesignTimeHtml() { string Html = @"Label: <input/>"; return Html; } }
Si vous l'exécutez vous constaterez que la saisie dans le TextBox ne
persiste pas. Saurez vous:
- Explique pourquoi
- Proposer une solution (il y en a au moins deux)
3 commentaires
Commentaire de: Cyril [Visiteur] · http://blogs.codes-sources.com/cyril
La solution la plus propre serait d'hériter de CompositeControl au lieu de WebControl et que les property pointent vers les propriétés Text du label/TextBox
Sinon je pense que l'erreur se situe au niveau de
TextBox.Attributes.Add("name", this.UniqueID);
Il risque d'y avoir deux attributs name positionné sur le tag html, du coup je sais pas trop comment cela va se comporter lors du Post ... Ah mon avis il prend le premier attribut et si c'est pas celui qu'on vient de définir alors ASP.net ira jamais dans le LoadPostData.
Il vaudrais mieux écrire TextBox.ID = this.UniqueID
Sinon je pense que l'erreur se situe au niveau de
TextBox.Attributes.Add("name", this.UniqueID);
Il risque d'y avoir deux attributs name positionné sur le tag html, du coup je sais pas trop comment cela va se comporter lors du Post ... Ah mon avis il prend le premier attribut et si c'est pas celui qu'on vient de définir alors ASP.net ira jamais dans le LoadPostData.
Il vaudrais mieux écrire TextBox.ID = this.UniqueID
01.04.07 @ 21:16
Commentaire de: Amethyste [Visiteur]
bravo Cyril!
En plus tu me casses la conclusion de la deuxième partie qui justement devait aborder CompositeControl :-(
Tant pis, je ne me ferai pas intimider et en parlerai quand même.
ben reste plus qu'à trouver le temps de le terminer!
En plus tu me casses la conclusion de la deuxième partie qui justement devait aborder CompositeControl :-(
Tant pis, je ne me ferai pas intimider et en parlerai quand même.
ben reste plus qu'à trouver le temps de le terminer!
02.04.07 @ 11:10
Commentaire de: Cyril [Visiteur] · http://blogs.codes-sources.com/cyril
Je suis prêt à relire si tu veux :-)
02.04.07 @ 19:35
Laisser un commentaire
| « Les contrôles dynamiques | Le HealthMonitoring d'ASP.NET 2.0 » |