Cette section du didacticiel Démarrage rapide décrit la manière dont les développeurs expérimentés peuvent écrire leurs propres contrôles serveur ASP.NET qui fonctionnent dans l'infrastructure de page ASP.NET. En écrivant vos propres contrôles serveur ASP.NET personnalisés, vous pouvez encapsuler une interface utilisateur personnalisée et d'autres fonctionnalités dans des contrôles qui peuvent être réutilisés sur les pages ASP.NET. Le didacticiel Démarrage rapide contient une présentation de la création des contrôles personnalisés par l'intermédiaire d'exemples pratiques. Pour plus d'informations sur la création de contrôles, consultez « Développement de contrôles serveur ASP.NET » dans la documentation du SDK Microsoft .NET Framework.
Remarque : Il se peut que les contrôles décrits dans cette section ne fonctionnent pas correctement au moment du design, dans un concepteur de formulaires, tel que Microsoft Visual Studio.NET, même s'ils fonctionnent correctement au moment de l'exécution sur des pages ASP.NET. Pour fonctionner dans un concepteur, un contrôle doit appliquer des attributs de design qui ne sont pas décrits ici. Pour plus d'informations sur les attributs de design à appliquer, consultez « Attributs de design pour les composants » dans la documentation du SDK.
public String Text {
get {
return (String) State["Text"];
}
set {
State["Text"] = value;
}
}
Public Property Text As String
Get
Return CType(State("Text"), String))
End Get
Set
State("Text") = Value
End Set
End Property
public function get Text() : String
{
return String(State("Text"));
}
public function set Text(value:String) : void
{
State("Text") = value;
}
C#
VB
JScript
L'exemple suivant illustre un contrôle personnalisé, Label, possédant deux propriétés, Text et FontSize, enregistrées dans State. La page ASP.NET qui utilise Label contient des boutons possédant des gestionnaires d'événements qui augmentent la taille de la police du texte dans Label lorsque vous cliquez sur un bouton. Par conséquent, la taille de la police augmente chaque fois que vous cliquez sur un bouton. Cette opération n'est possible qu'à l'aide de la gestion d'état (Label doit connaître la taille de la police avant la publication afin de restituer la taille de police immédiatement supérieure après la publication).
private int _value = 0;
public bool LoadPostData(String postDataKey, NameValueCollection values) {
_value = Int32.Parse(values [this.UniqueID]);
return false;
}
Private _value As Integer = 0
Public Function LoadPostData (postDataKey As String, values As NameValueCollection) As Boolean
_value = Int32.Parse(values (Me.UniqueID))
Return(False)
End Function
private var _value:int = 0;
public function LoadPostData (postDataKey:String, values: NameValueCollection) : Boolean {
_value = Int32.Parse(values [this.UniqueID]);
return false;
}
C#
VB
JScript
L'exemple suivant définit un contrôle personnalisé, NonComposition1, qui implémente IPostBackDataHandler et possède une propriété, Value. Le contrôle restitue une zone de texte HTML dont l'attribut de texte est la chaîne représentant Value. La propriété est définie en examinant les données d'entrée de publication. La page qui utilise NonComposition1 possède également deux boutons disposant de gestionnaires d'événements pour incrémenter et décrémenter la propriété Value de NonComposition1.
public void RaisePostBackEvent (String eventArgument) {
if (eventArgument == "Add") {
this.Value++; }
else {
this.Value--;
}
}
Public Sub RaisePostBackEvent (eventArgument As String)
If eventArgument = "Add" Then
Me.Value = Me.Value + 1
Else
Me.Value = Me.Value - 1
End If
End Sub
public function RaisePostBackEvent (eventArgument:String) : void {
if (eventArgument == "Add") {
this.Value++; }
else {
this.Value--;
}
}
C#
VB
JScript
L'interface utilisateur présentée au client est identique à celle de l'exemple précédent. Cependant, la totalité de l'interface utilisateur est restituée par un contrôle personnalisé qui traite également les événements de publication. Le développeur de pages peut se contenter d'ajouter NonComposition2 à la page, sans fournir de logique de gestion des événements. L'exemple suivant illustre ce code en action.
[TemplateContainer(typeof(Template1))] public ITemplate MessageTemplate {...}
Public Property <TemplateContainer(GetType (Template1VB))> MessageTemplate As ITemplate
TemplateContainerAttribute(Template1) function get MessageTemplate() : ITemplate
C#
VB
JScript
L'attribut (entre crochets droits ci-dessus) spécifie le type du contrôle conteneur (parent).
L'interface ITemplate possède une méthode, InstantiateIn, qui crée une instance de contrôle de manière dynamique. Elle est appelée sur la propriété ITemplate de la méthode CreateChildControls, comme le montre l'exemple suivant.
Comme décrit à la section Récupération de contenu interne, si un contrôle A possède des contrôles imbriqués dans ses balises de contrôle sur une page, l'analyseur de page ajoute des instances de ces contrôles à la collection Controls de A. Cette opération s'effectue en appelant la méthode AddSubParsedObject de A. Chaque contrôle hérite de cette méthode de Control. L'implémentation par défaut insère simplement un contrôle enfant dans l'arborescence de la hiérarchie des contrôles. Un contrôle peut substituer la logique d'analyse par défaut en écrasant la méthode AddSubParsedObject. Remarquez que ces explications sont quelque peu simplifiées. Pour plus de détails, consultez l'exemple suivant.
L'exemple suivant définit un contrôle personnalisé, CustomParse1, qui substitue la logique d'analyse par défaut. Lorsqu'un contrôle enfant d'un certain type est analysé, il est ajouté à une collection. La logique de restitution de CustomParse1 se base sur le nombre d'éléments de cette collection. Un contrôle personnalisé simple, Item, est également défini dans l'exemple.
VB CustomParse1.aspx
Remarque : Si votre contrôle personnalisé dérive de WebControl, il ne possède pas la logique d'analyse décrite dans l'exemple, car WebControl est marqué de ParseChildrenAttribute(ChildrenAsProperties = true), ce qui génère une autre logique d'analyse. Pour plus d'informations sur ParseChildrenAttribute, consultez la documentation du Kit de développement. La rubrique Récupération de contenu interne décrit également ce problème en détail.
[ControlBuilderAttribute(typeof(CustomParse2ControlBuilder))]
public class CustomParse2 : Control {...}
Public Class <ControlBuilderAttribute (GetType(CustomParse2ControlBuilderVB))> _
CustomParse2VB : Inherits Control
ControlBuilderAttribute(CustomParse2ControlBuilder)
class CustomParse2 extends Control {... }
C#
VB
JScript
L'élément entre crochets droits ci-dessus est un attribut du Common Language Runtime qui associe la classe CustomParse2ControlBuilder au contrôle CustomParse2. Vous pouvez définir votre propre générateur de contrôle personnalisé en le dérivant de ControlBuilder et en remplaçant ses méthodes.
L'exemple suivant définit un générateur de contrôle personnalisé qui substitue la méthode GetChildControlType héritée de ControlBuilder. Cette méthode retourne le type du contrôle à ajouter et peut être utilisée pour décider des contrôles à inclure. Dans l'exemple, le générateur de contrôle n'ajoute un contrôle enfant que si la balise porte le nom « customitem ». Le code du contrôle ressemble considérablement à celui de l'exemple précédent, à l'exception de l'ajout de l'attribut personnalisé.
VB CustomParse2.aspx
Nos serveurs
sont désormais des serveurs
Pentium 3 Ghz, 1 Go Ram
La
formule de base est à 10
Euros TTC / mois
Si vous avez des besoins plus spécifiques (composants,
espace disque...), nous sommes la pour répondre à
vos questions.
Rappel : les
frais d'installation sont gratuits
Prosygma élu meilleur
site. Trois nouveaux composants ASP sont désormais
en place sur toutes nos formules.Il s'agit de ASPIMAGE,
ASPPOP3 et ASPMAIL.
La dernière version de Microsoft® .NET Framework contient
tout ce qu'il vous faut pour faire fonctionner des applications
.NET Framework est disponible sur nos serveurs