FAQ ASP.NET/VB.NET

Sommaire
>
Les contrôles utilisateurs
Comment créer un contrôle utilisateur (User Control .ascx) ?
Comment utiliser un contrôle utilisateur dans une page ?
J'ajoute un contrôle dans mon user control et le compilateur ne le reconnait pas dans le code behind ?
Je crée mon user control dynamiquement mais je n'arrive pas à acceder aux champs qu'il contient (null) ?
Comment passer des paramètres à un userControl ?
Comment passer des paramètres au constructeur d'un contrôle utilisateur ?
Comment déclarer mon contrôle utilisateur pour qu'il soit déclaré dans toutes mes pages ?
Comment créer un contrôle utilisateur (User Control .ascx) ?
Comment utiliser un contrôle utilisateur dans une page ?
J'ajoute un contrôle dans mon user control et le compilateur ne le reconnait pas dans le code behind ?
Je crée mon user control dynamiquement mais je n'arrive pas à acceder aux champs qu'il contient (null) ?
Comment passer des paramètres à un userControl ?
Comment passer des paramètres au constructeur d'un contrôle utilisateur ?
Comment déclarer mon contrôle utilisateur pour qu'il soit déclaré dans toutes mes pages ?
| ||
| auteur : nico-pyright(c) | ||
Un contrôle utilisateur (extension .ascx) est grosso modo une mini page (.aspx) qui peut s'inclure dans une page et qui ne comporte aucune des balises suivantes : <html><body><form>. Un contrôle utilisateur a pour directive :
Pour l'ajouter depuis visual studio : Click droit sur le projet, Add --> New Item -> Web User Control ![]()
L'IDE génère automatiquement la directive du contrôle utilisateur et le fichier source de code behind dont devra hériter le contrôle utilisateur. NB : penser à mettre AutoEventWireup à false (voir A quoi sert AutoEventWireup ?) |
| ||
| auteur : nico-pyright(c) | ||
Pour utiliser un contrôle utilisateur dans sa page, il faut utiliser la directive @register pour faire connaitre le contrôle utilisateur à la page :
(NB : on peut préciser l'assembly qui contient l'userControl si celle-ci est différente en rajoutant l'attribut Assembly="....") Pour l'insérer enfin dans sa page, on utilisera la combinaison TagPrefix:TagName :
Cette dernière ligne de code devra bien sur être ajoutée entre les balises <form> et </form> de sa page.
|
| ||
| auteur : nico-pyright(c) | ||
Lorsque j'ajoute un contrôle (label) par exemple :
L'IDE ajoute automatiquement dans la classe partielle (fichier .designer.cs)
Il peut arriver que l'ide n'arrive pas à ajouter ce membre en protected (source control qui bloque le fichier, lecture seule, etc ...) Dans ce cas, il faudra le rajouter à la main dans ce même fichier Vérifiez également qu'il ne soit pas déclaré en private. |
| ||
| auteur : nico-pyright(c) | ||
Lorsque vous essayez d'accèder aux contrôles présents dans votre user control, vous obtenez l'exception : System.NullReferenceException C'est que vous avez probablement cherché à instancier votre usercontrol avec new, de cette facon par exemple :
Ce n'est pas la bonne méthode. Pour charger un UserControl, il faut utiliser LoadControl. La méthode LoadControl lit le fichier et l'instancie comme un contrôle pouvant être ajouté à la page.
Remarque : En général, il vaut mieux éviter de charger un contrôle utilisateur dynamiquement ; il vaudra mieux le placer dans la page aspx (ou un usercontrol ascx) quitte à le masquer dans le OnInit si on en a pas besoin suivant certaines conditions
|
| ||
| auteur : nico-pyright(c) | ||
La solution la plus classique est de créer des propriétés publiques sur ce contrôle utilisateur et de les renseigner lors de l'ajout du contrôle utilisateur dans la page. Source du contrôle utilisateur :
dans la page.aspx
NB : cet exemple initialise la propriété MaValeur à un label dans le onInit. Il aurait pu être judicieux évidement d'utiliser un databinding avec # (voir Qu'est-ce que le scriptlet d'expressions liées <%# expression %>?) voir aussi : comment passer des paramètres au constructeur d'un contrôle utilisateur |
| ||||
| auteur : nico-pyright(c) | ||||
On peut être tenté lors du chargement dynamique d'un contrôle utilisateur d'utiliser un constructeur qui a des paramètres au lieu de créer des propriétés et de les renseigner. Prenons ce contrôle utilisateur par exemple :
Si on charge ce contrôle utilisateur sans passer de paramètres au constructeur, on aura une valeur par défaut ; sinon on utilisera la valeur passée. On a bien noté qu'il fallait utiliser LoadControl lors d'un chargement dynamique de contrôle utilisateur (voir Je crée mon user control dynamiquement mais je n'arrive pas à acceder aux champs qu'il contient (null) ?) Voici une fonction statique qui s'occupe d'instancier le contrôle utilisateur avec des paramètres dans le constructeur, en utilisant la reflexion
A utiliser ainsi :
NB : ne pas oublier de créer également un constructeur par défaut, sinon vous aurez l'erreur suivante
|
| ||
| auteur : nico-pyright(c) | ||
Cela se passe dans le web.config, à la section pages/controls.
A utiliser ainsi dans une page :
|
