ASP .NET 2.0 : Création de contrôles serveurs Présenté par Pierre Lagarde pierlag@microsoft.com Relation Développeurs Microsoft France ASP .NET 2.0 : Création de contrôles serveurs Level 300
Deux visions de l’approche composant L’approche Contrôle Utilisateur (UserControl) Créer une pagelet réutilisable (*.ascx) dans le designer graphique Facile à développer Pas multi-projet L’approche Contrôle Server (CustomControl) Créer un composant .NET Web réutilisable depuis la toolbox Modèle compilé dans une dll Multi-projet Pas facile à développer .NET car comme windows hérite de component
L’approche Contrôle Server Identifié par un tag dans le flux aspx <asp:button …> Les contrôles serveurs peuvent : Générer un flux HTML vers le client dans la méthode Render writer.RenderBeginTag(HtmlTextWriterTag.Span); Générer du script client (cas des contrôles Validators) RegisterClientScriptBlock Adapter leur rendu aux différents clients Mobile / IE / Firefox
La nouvelle Architecture des Contrôles Control (1.x) WebControl (1.x) BaseDataBoundControl BaseDataList (1.x) DataBoundControl HierarchicalDataBoundControl TreeView ListControl CompositeDataBoundControl BulletedList DetailsView Menu CheckBoxList FormView DropDownList GridView ListBox RadioButtonList
2 : Mon premier contrôle serveur demo 2 : Mon premier contrôle serveur <span style="font-size:XX-[Large / Small]"> Test Phrase </span>
Sauvegarde des propriétés Le contrôle serveur est créé à chaque génération de page il faut donc implémenter un mécanisme de sauvegarde des données Utilisation du ViewState public bool LargeText { get object o = ViewState["LargeText"]; if (o == null) return _largeText; else return (bool)o; } set _largeText = value; ViewState["LargeText"] = _largeText;
Visibilité des propriétés dans l’inspecteur d’objet Utilisation des attributs sur les propriétés [Bindable(true), Category("Appearance"), DefaultValue("true")] public bool LargeText { … } [EditorBrowsable(EditorBrowsableState.Never), DefaultValue(false)] public override bool Visible
3 : Modifier mon premier contrôle demo 3 : Modifier mon premier contrôle
Contrôle invisible Réaliser un contrôle visible par Visual Studio mais invisible dans la page HTML Utilisation des « ControlDesigner » [DesignerAttribute(typeof(InvisibleControlControlDesigner))] public class InvisibleControl : Control { … } public class InvisibleControlControlDesigner : ControlDesigner public override string GetDesignTimeHtml() { return base.CreatePlaceHolderDesignTimeHtml();}
demo 4 : Contrôle Invisible
Ajout de fonctionnalités à un contrôle existant Créer un DropDownList multicolore <html> <body> <select> <option style="color:red;font-weight:700;font-family:courier new;">One</option> <option>Two</option> <option>Three</option> </select> </body> </html>
Hériter du DropDownList Ajout de propriétés Réécrire le RenderContents
Customiser le SmartTag pour la nouvelle DropDownList Créer un nouveau ControlDesign public override DesignerActionListCollection ActionLists { //Return DesignerActionListCollection() }
5 : MyDropDownList MyDropDownListControlDesign demo 5 : MyDropDownList MyDropDownListControlDesign