150 likes | 286 Views
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)
E N D
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
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) BaseDataList (1.x) BaseDataBoundControl DataBoundControl HierarchicalDataBoundControl TreeView ListControl CompositeDataBoundControl BulletedList DetailsView Menu CheckBoxList FormView DropDownList GridView ListBox RadioButtonList
2 : Mon premier contrôle serveur demo <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 { … }
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();} }
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() }