FAQ ASP.NET/VB.NET
Sommaire
>
Les webforms >
Formulaires et code-behind
Ma dropdownlist est bien remplie, mais quand je sélectionne un item, c'est toujours la première valeur de la liste qui est retournée
Comment ajouter dynamiquement des contrôles à une page ?
Comment créer dynamiquement des métas tags ?
Comment capturer le clic d'un bouton créé dynamiquement ?
Comment vérifier la validité d'une adresse ip dans un TextBox?
Comment empêcher un RequiredFieldValidator de fonctionner lors du clic sur un bouton?
Pourquoi ai-je une erreur injection script?
Comment lire un TextBox ligne par ligne?
La propriété SelectedValue d'une DropDownList me renvoie Nothing, pourquoi?
Comment modifier le font-name d'un label en code behind?
Comment ajouter d'autres éléments que ceux d'une liste ?
Lorsque j'agis sur les attributs d'un checkbox, c'est sur le span associé qu'est répercutée mon action
Comment filtrer et masquer des éléments d'un repeater ?
Comment passer des valeurs d'une page à une autre ... PostbackUrl, CrossPostBack et Server.Transfer
Pourquoi je perds la valeur de mon contrôle lors d'un postback ?
Comment savoir quel contrôle à déclenché le postback ?
Comment maintenir le scroll après un postback ?
Comment poster automatiquement la page en javascript ?
Comment simuler un click de bouton pour poster une page ?
Comment utiliser une application Silverlight dans une page ASP.NET ?
Comment faire communiquer mon application Silverlight avec ma page ASP.NET ?
6.5.1. Dropdownlist (5)
Comment insérer un élément dans une DropDownList à un emplacement donné?
J'ai déclaré l'attribut OnChange sur ma DropDownList mais rien ne se passe lors d'un changement de valeur. Pourquoi?
Parfois ma dropdownlist ne lève pas l'événement OnSelectedIndexChanged ou OnTextChanged, même si AutoPostBack='true', que faire ?
Comment lever l'événement SelectedIndexChanged pour des DropDownList dans un Repeater lorsque le Viewstate est à false ?
Comment faire pour que ma dropdownlist ne cause un postback que sous certaines conditions ?
6.5.2. Validators (15)
Qu'est-ce qu'un validator ?
Peut-on se passer de la validation coté serveur et n'utiliser que la validation coté client ?
A quel moment intervient la validation dans le cycle de vie d'une page ?
Comment afficher un message d'erreur dans un validateur ?
Quels sont les contrôles serveur que l'on peut valider ?
Comment vérifier qu'une page est valide coté serveur ?
Qu'est-ce qu'un groupe de validation ?
Comment valider un RadioButton ?
6.5.2.1. RequiredFieldValidator (1)
A quoi sert le RequiredFieldValidator ?
6.5.2.2. RangeValidator (1)
A quoi sert le RangeValidator ?
6.5.2.3. CompareValidator (1)
A quoi sert le CompareValidator ?
6.5.2.4. RegularExpressionValidator (1)
A quoi sert le RegularExpressionValidator ?
6.5.2.5. CustomValidator (2)
A quoi sert le CustomValidator ?
Comment passer des paramètres à la fonction de validation coté client ?
6.5.2.6. ValidationSummary (1)
A quoi sert le ValidationSummary ?
Ma dropdownlist est bien remplie, mais quand je sélectionne un item, c'est toujours la première valeur de la liste qui est retournée
Comment ajouter dynamiquement des contrôles à une page ?
Comment créer dynamiquement des métas tags ?
Comment capturer le clic d'un bouton créé dynamiquement ?
Comment vérifier la validité d'une adresse ip dans un TextBox?
Comment empêcher un RequiredFieldValidator de fonctionner lors du clic sur un bouton?
Pourquoi ai-je une erreur injection script?
Comment lire un TextBox ligne par ligne?
La propriété SelectedValue d'une DropDownList me renvoie Nothing, pourquoi?
Comment modifier le font-name d'un label en code behind?
Comment ajouter d'autres éléments que ceux d'une liste ?
Lorsque j'agis sur les attributs d'un checkbox, c'est sur le span associé qu'est répercutée mon action
Comment filtrer et masquer des éléments d'un repeater ?
Comment passer des valeurs d'une page à une autre ... PostbackUrl, CrossPostBack et Server.Transfer
Pourquoi je perds la valeur de mon contrôle lors d'un postback ?
Comment savoir quel contrôle à déclenché le postback ?
Comment maintenir le scroll après un postback ?
Comment poster automatiquement la page en javascript ?
Comment simuler un click de bouton pour poster une page ?
Comment utiliser une application Silverlight dans une page ASP.NET ?
Comment faire communiquer mon application Silverlight avec ma page ASP.NET ?
6.5.1. Dropdownlist (5)
Comment insérer un élément dans une DropDownList à un emplacement donné?
J'ai déclaré l'attribut OnChange sur ma DropDownList mais rien ne se passe lors d'un changement de valeur. Pourquoi?
Parfois ma dropdownlist ne lève pas l'événement OnSelectedIndexChanged ou OnTextChanged, même si AutoPostBack='true', que faire ?
Comment lever l'événement SelectedIndexChanged pour des DropDownList dans un Repeater lorsque le Viewstate est à false ?
Comment faire pour que ma dropdownlist ne cause un postback que sous certaines conditions ?
6.5.2. Validators (15)
Qu'est-ce qu'un validator ?
Peut-on se passer de la validation coté serveur et n'utiliser que la validation coté client ?
A quel moment intervient la validation dans le cycle de vie d'une page ?
Comment afficher un message d'erreur dans un validateur ?
Quels sont les contrôles serveur que l'on peut valider ?
Comment vérifier qu'une page est valide coté serveur ?
Qu'est-ce qu'un groupe de validation ?
Comment valider un RadioButton ?
6.5.2.1. RequiredFieldValidator (1)
A quoi sert le RequiredFieldValidator ?
6.5.2.2. RangeValidator (1)
A quoi sert le RangeValidator ?
6.5.2.3. CompareValidator (1)
A quoi sert le CompareValidator ?
6.5.2.4. RegularExpressionValidator (1)
A quoi sert le RegularExpressionValidator ?
6.5.2.5. CustomValidator (2)
A quoi sert le CustomValidator ?
Comment passer des paramètres à la fonction de validation coté client ?
6.5.2.6. ValidationSummary (1)
A quoi sert le ValidationSummary ?
| ||
auteur : David Pedehourcq | ||
Ce problème est trés récurent. Dans 99% des cas le problème vient du postback :
Si vous remplissez votre dropdownlist dans le "Page_Load" de votre page, le code correct est :
L'érreur fréquement comise est d'oublier le "If not page.IsPostBack then" quand vous sélectionnez un objet de la dropdownlist, la page se
recharge en fesant un postback, donc repasse par le "Page_Load et reinitialise votre dropdownlist. On spécifie donc qu'il ne faut pas
reinitialiser la dropdownlist en cas de PostBack et on récupèrera ainsi la valeur sélectionnée.
|
| ||
auteur : David Pedehourcq | ||
Afin de voir comment on ajoute dynamiquement un webcontrol à une page, nous allons prendre un exemple simple : ajouter un label à une
page aspx. Dans la page aspx, on ajoute un PlaceHolder :
dans le code-behind
Vous avez là le code minimal pour ajouter un contrôle dynamiquement à une page aspx. Vous pouvez ensuite jouer sur les différentes
propriétés et méthodes du webcontrol pour l'initialiser comme vous souhaitez.
|
| |||
auteur : David Pedehourcq | |||
Nous allons voir dans cet exemple qu'il est trés facile de créer dynamiquement des métas tags en ASP.NET
dans le head de la page aspx :
dans le code-behind on déclare :
ensuite pour donner des valeurs aux métas tags :
|
| ||
auteur : Déclic | ||
Dans la procédure de création du bouton on ajoute :
ensuite :
ATTENTION : Lors du postback éffectué aprés l'évènement, le bouton doit impérativement être rechargé dans la page pour que l'évènement soit traité. Quitte à mettre sa propriétée visible à false si vous ne voulez pas qu'il soit visible. |
| ||
auteur : Louis-Guillaume Morand | ||
Il convient d'utiliser un RegularExpressionValidator pour vérifier la strucuture
de la chaîne:
|
| ||
auteur : Didier Danse | ||
Les RequiredFieldValidator effectue ses vérifications lors de chaque envoi au serveur.
Dans le cas d'un bouton "Annuler" ou "Précédent", cela est un peu embêtant puisque
les données ne seront certainement pas correctes et la page ne sera donc pas envoyée
au serveur. Pour résoudre cela, il suffit de mettre la propriété CausesValidation du bouton à false.
|
| ||
auteur : Didier Danse | ||
On a parfois besoin d'envoyer des informations telles que du xml, html ou tout autre chose
contenant <...>. Par défaut, asp.NET refuse l'envoi de ces tags et l'informe par l'intermédiaire
d'une exception qui signale que, par mesure de sécurité, il est interdit d'envoyer de telles choses au
serveur. Effectivement, en autorisant cet envoi, il serait possible d'injecter du javascript par exemple. Pour permettre l'envoi de ces informations, il est nécessaire de mettre validateRequest="false" dans la directive "Page". Une fois ces informations envoyées, il faut encore précisé au serveur qu'il ne doit pas les interpréter mais bien garder cela comme du texte. Ceci se fait par l'intermédiaire de
|
| ||
auteur : Xavier Talour | ||
Pour effectuer une action sur chaque ligne d'un "texte" encodé dans un TextBox:
|
| ||
auteur : Didier Danse | ||
Il arrive fréquemment que l'on remplisse une DropDownList avec les valeurs qui
sont à afficher. Par contre, les valeurs sont souvent oubliées lors de cette initialisation.
Si l'initialisation se fait à l'aide d'un DataSet, rien de plus simple, il suffit de
spécifier quel est le champ qui permettra de récupérer la valeur:
Si l'initialisation se fait par l'ajout manuel d'Items, il suffit de créer des Items
en spécifiant les deux valeurs.
|
| ||
auteur : Didier Danse | ||
Si l'on souhaite changer la police (la taille par exemple), il est nécessaire
d'utiliser un style. Ce style est défini de la manière suivante:
Il ne reste plus qu'à l'appliquer au Label par
|
| ||
auteur : Didier Danse | ||
Vous pouvez ajouter un Item directement en utilisant Items.Add. Le premier paramètre correspond à l'emplacement (en l'occurrence 0) :
Cependant, cette solution ne fait qu'afficher un texte. Si vous souhaitez passer un texte ainsi que la valeur correspondante, il est nécessaire d'utiliser un objet ListItem :
|
| ||||
auteur : nico-pyright(c) | ||||
Imaginons un asp:checkbox et une fonction javascript cliente qui affiche si la case est cochée ou non. On pourrait etre tenté de faire :
sauf que ceci ne va pas marcher, en effet asp.net génère :
on se rend compte que le onchange est appliqué au span. Comment faire alors pour agir sur l'input de type checkbox ? il faudra passer par le code behind :
et cette fois-ci, asp.net génèrera :
NB : les attributs du label seront accessibles grace à LabelAttributes
|
| ||||
auteur : nico-pyright(c) | ||||
Il peut arriver qu'on ait besoin de faire un filtre sur une datasource de repeater mais qu'on ne puisse pas toujours filtrer cette source en amont. Dans ce cas, on peut très bien faire notre filtre au moment où le repeater se construit. Soit un repeater tout bete :
Il suffit d'agir sur le ItemDataBound et de masquer l'élément. Ici par exemple, je n'affiche que les nombres impairs :
Une autre solution est d'intervenir au moment du databinding
|
| |||||||||
auteur : nico-pyright(c) | |||||||||
Une manière très simple de récupérer des valeurs d'une page à l'autre est d'utiliser Server.Transfert qui permet de terminer l'exécution de la page courante et d'enchainer sur une nouvelle page. Cela peut s'utiliser comme ca :
L'avantage de cette utilisation est qu'on peut aisément récupérer la valeur de notre textbox par exemple dans la Page2, en utilisant la propriété PreviousPage et en la castant avec le bon type. En imaginant que la page expose une propriété publique de ce genre,
on pourra faire par exemple dans le OnLoad de la Page2
Ceci permet également de faire transiter des objets plus complexes que des strings. Imaginons que dans ma première page j'ai construit une collection de liste de chaipakoi, il sera alors très simple de cette facon de la faire transiter jusqu'à la page suivante. Asp.Net 2.0 ajoute la notion de cross page posting, à savoir que l'exemple ci-dessous pourra se transformer en :
Notez la propriété PostBackUrl qui nous enlève la gestion du Server.Transfert et qui évite de faire une étape intermédiaire en repassant par la page Default. Nous sommes également déchargé de la gestion du handler sur le click de bouton. Toutefois, l'utilisation de la propriété PreviousPage dans la Page2 nous fait repasser dans le OnInit, OnLoad... de la page Default. On pourra éventuellement contrôler les actions à y effectuer en testant la propriété IsCrossPagePostBack qui indiquera si nous sommes en train de faire un cross page posting. Les deux concepts sont quasiments équivalent. Une différence majeure est que dans le cas de l'utilisation de Server.Transfert, le navigateur n'est pas au courant du transfer, et un effet visible sera que l'url reste inchangée. Dans le cas d'un cross page, l'url sera la bonne. NB : il pourra être intéressant d'effectuer quelques vérifications supplémentaires, notamment pour être bien sur que l'on récupère la page attendu comme PreviousPage, et transformer le basique cast du dessus en
PreviousPage peut être également fortement typée en rajoutant une directive dans la page destination.
ce qui fait que dans le codebehind, on aura plus besoin de cast et on pourra utiliser directement
En fait, le designer nous surchage simplement la propriété :
Ce qui lèvera une exception si jamais on vient d'une autre page ...
|
| ||
auteur : nico-pyright(c) | ||
C'est un cas très fréquent lors de l'alimentation du contrôle dans le OnLoad (une dropdown par exemple). Il faut vérifier qu'on est pas dans un postback pour alimenter les données.
|
| ||
auteur : nico-pyright(c) | ||
On examinera la valeur de Request.Form["__EVENTTARGET"] qui contiendra l'uniqueId du contrôle qui a déclenché le postback
| ||
lien : Parfois ma dropdownlist ne lève pas l'événement OnSelectedIndexChanged ou OnTextChanged, même si AutoPostBack='true', que faire ? |
| ||
auteur : nico-pyright(c) | ||
L'utilisation de la propriété MaintainScrollPositionOnPostback (positionnée à true) sur la page permet de rajouter automatiquement du javascript qui se chargera de re-positionner correctement le scroll à l'endroit où on l'a laissé. |
| |||
auteur : nico-pyright(c) | |||
Pour que le framework.net puisse appréhender correctement le postback d'une page, il va falloir utiliser la méthode javascript _doPostBack(...). Si on utilise une quelconque autre méthode (form.submit(), etc ...), cela ne sera pas géré correctement. On va alors utiliser la méthode GetPostBackEventReference pour générer correctement la fonction _doPostBack. Prenons l'exemple simpliste d'une dropdownlist qui devra poster la page à chaque changement de selection (notez que ceci peut etre fait automatiquement grace à la propriété autopostback, mais ce n'est pas le but de la présentation). soit la page suivante :
dans le code behind, on associe la méthode javascript onchange à la fonction qui va poster la page. On le construira ainsi :
Vous pouvez constater que la page est postée à chaque changement de valeur dans la dropdown. On peut également vérifier que ce postback est conforme en utilisant la propriété __EVENTTARGET comme expliqué ici.
|
| |||||
auteur : nico-pyright(c) | |||||
Prenons un exemple avec un TextBox et un bouton :
on a l'événement du click dans le code behind écrit ainsi :
Comment simuler un clic par exemple lorsque la valeur du textbox change ? Pour ca, on va utiliser la méthode GetPostBackEventReference.
Si on s'arrete à ca, ASP.NET va nous lever une belle erreur :
Cette erreur provient du fait qu'ASP.NET effectue un controle sur le POST pour détecter d'éventuelles attaques d'injections ou d'altération de la requete POST. C'est le principe d'event validation. Une solution pour le désactiver est de mettre la propriété EnableEventValidation à false dans la directive de Page. Ceci aura pour effet de désactiver complètement ce processus de validation, ce qui peut etre nécessaire dans certain cas, mais ne permet plus cette vérification automatique pour toute la page (ceci ne peut pas etre fait controle par controle). L'autre solution plus propre est d'indiquer à ASP.NET que ce postpack est tout à fait autorisé. C'est ce que permet l'utilisation de la méthode RegisterForEventValidation. Cet appel ne pourra etre fait qu'en surchargeant la méthode Render de la page :
Désormais, le post est bien pris en compte et la méthode clic associée au bouton est bien lancée. |
| |||||
auteur : nico-pyright(c) | |||||
En utilisant le web control.
Par exemple :
Il faudra bien sur avoir défini le tag au préalable :
ou alors dans le web.config
Ne pas oublier également de référencer l'assembly System.Web.Silverlight dans votre projet. Quelques propriétés disponibles pour ce controle : - Source : l'url de fichier xap à utiliser - Version : la version minimale de silverlight qui doit etre vérifiée (pour utiliser silverlight 2, mettre cette propriété à 2.0) - ScaleMode : ScaleMode.None ou ScaleMode.Stretch ou ScaleMode.Zoom - Width : la largeur du controle - Height : la hauteur du controle - OnPluginLoaded : associe une fonction javascript et l'execute lorsque l'application silverlight est chargée - OnPluginError : associe une fonction javascript et l'execute lorsque l'application silverlight a une erreur N'oubliez pas non plus d'ajouter la balise :
|
| ||
auteur : nico-pyright(c) | ||
En utilisant le DOM. Soit par exemple l'extrait de page ASPX suivant :
qui contient un controle <asp:Silverlight> et un <div> identifié par son id : "result". On utilisera la classe System.Windows.Browser.HtmlPage, par exemple, lors du click sur un bouton Silverlight, on pourra faire :
Ainsi, on pourra modifier le contenu du div depuis notre application Silverlight. |