Validation : effacer les messages

Le
Gloops
Bonjour tout le monde,

Les contrôles de validation sont bien pratiques pour afficher un messag=
e
d'erreur avec quasiment rien comme code à écrire.

Toutefois j'ai un souci avec. Le contrôle de validation m'affiche un
message pour dire qu'une adresse mail n'est pas valide, bon d'accord,
mais ce message reste affiché jusqu'à ce que, soit un autre type
d'erreur soit commis, soit une adresse mail correcte soit saisie.

ça fait que, pour peu que la machine cliente soit un peu lente,
l'utilisateur n'a absolument aucun moyen de savoir (sauf bien sûr à
vérifier par lui-même et auquel cas pourquoi diable n'a-t-il pas sais=
i
correctement du premier coup ?) si l'adresse qu'il lui est reproché
d'avoir saisie incorrecte est celle qu'il vient de saisir, ou celle
qu'il a proposée la fois précédente qu'il a cliqué sur le bouton.=
Il n'a
qu'à attendre pour voir si il va se passer quelque chose.

Ainsi donc, si il se confirme que ce n'est pas déjà prévu et que ce=

n'est pas moi qui ai mal mis en œuvre les contrôles de validation, je=

voudrais créer un script onchange sur le contrôle TextBox, à exéc=
uter en
local bien entendu, qui rende invisible le contrôle ValidationSummary. =

Voilà qui ferait disparaître le message de l'écran dès qu'on en
tiendrait compte pour modifier le texte, et ainsi lorsque l'utilisateur
verrait réapparaître le message il saurait que c'est au sujet de sa
nouvelle saisie.

Or, pour faire ceci, je rencontre une incohérence, à moins encore une=

fois que ce soit moi qui aie des trucs mal branchés dans la tête
Le contrôle TextBox a une propriété obligatoire runat, mais cette
propriété ne peut avoir qu'une valeur possible, server. Alors je me
demande bien, puisque la plateforme sait déjà où exactement elle ve=
ut
exécuter ce script et quelle valeur elle accorde au choix du programmeu=
r
à ce sujet, pourquoi diable elle impose à celui-ci de confirmer ce ch=
oix
qui ne lui convient pas.

En effet, soit on met un CauseValidation au TextBox et à chaque fois
qu'on va saisir un caractère il faudra attendre le PostBack, voilà qu=
i
va être génial pour les gens connectés en RTC avec un modem 16 bps,=
soit
on ne le met pas et le runat server ne sera exécuté que lorsqu'on
cliquera sur le bouton, et à ce moment le message suivant sera affiché=
,
donc il vaut autant ne rien faire.

J'ai l'impression que j'ai dû prendre un truc par le mauvais bout, mais=

quoi ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles TOURREAU - MVP C#
Le #19971851
Bonjour,

Pour faire ce genre de contrôle de validation sans réaliser de postback,,
vous devez programmer par vous même le code en JavaScript...

Cordialement

--
Gilles TOURREAU - MVP C#
E-Mail :
Site Web : http://gilles.tourreau.fr

Société P.O.S - Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

"Gloops" discussion :
Bonjour tout le monde,

Les contrôles de validation sont bien pratiques pour afficher un message
d'erreur avec quasiment rien comme code à écrire.

Toutefois j'ai un souci avec. Le contrôle de validation m'affiche un
message pour dire qu'une adresse mail n'est pas valide, bon d'accord, mais
ce message reste affiché jusqu'à ce que, soit un autre type d'erreur soit
commis, soit une adresse mail correcte soit saisie.

ça fait que, pour peu que la machine cliente soit un peu lente,
l'utilisateur n'a absolument aucun moyen de savoir (sauf bien sûr à
vérifier par lui-même et auquel cas pourquoi diable n'a-t-il pas saisi
correctement du premier coup ?) si l'adresse qu'il lui est reproché
d'avoir saisie incorrecte est celle qu'il vient de saisir, ou celle qu'il
a proposée la fois précédente qu'il a cliqué sur le bouton. Il n'a qu'à
attendre pour voir si il va se passer quelque chose.

Ainsi donc, si il se confirme que ce n'est pas déjà prévu et que ce n'est
pas moi qui ai mal mis en œuvre les contrôles de validation, je voudrais
créer un script onchange sur le contrôle TextBox, à exécuter en local bien
entendu, qui rende invisible le contrôle ValidationSummary. Voilà qui
ferait disparaître le message de l'écran dès qu'on en tiendrait compte
pour modifier le texte, et ainsi lorsque l'utilisateur verrait
réapparaître le message il saurait que c'est au sujet de sa nouvelle
saisie.

Or, pour faire ceci, je rencontre une incohérence, à moins encore une fois
que ce soit moi qui aie des trucs mal branchés dans la tête ...
Le contrôle TextBox a une propriété obligatoire runat, mais cette
propriété ne peut avoir qu'une valeur possible, server. Alors je me
demande bien, puisque la plateforme sait déjà où exactement elle veut
exécuter ce script et quelle valeur elle accorde au choix du programmeur à
ce sujet, pourquoi diable elle impose à celui-ci de confirmer ce choix qui
ne lui convient pas.

En effet, soit on met un CauseValidation au TextBox et à chaque fois qu'on
va saisir un caractère il faudra attendre le PostBack, voilà qui va être
génial pour les gens connectés en RTC avec un modem 16 bps, soit on ne le
met pas et le runat server ne sera exécuté que lorsqu'on cliquera sur le
bouton, et à ce moment le message suivant sera affiché, donc il vaut
autant ne rien faire.

J'ai l'impression que j'ai dû prendre un truc par le mauvais bout, mais
quoi ?



Gloops
Le #19977401
Gilles TOURREAU - MVP C# a écrit, le 22/08/2009 21:40 :
Bonjour,

Pour faire ce genre de contrôle de validation sans réaliser de
postback,, vous devez programmer par vous même le code en JavaScript. ..

Cordialement




Bjr,

A vrai dire, oui, c'est un peu ça que j'ai essayé de faire. C'est un peu
pour ça que le runat=serveur pour le TextBox m'embête un peu. Y a-t -il
moyen de lui faire entendre raison ?
Gloops
Le #20030161
Bonjour,

Maintenant que je commence à être opérationnel avec la réception de
mails, je reviens sur la validation.

Apparemment ça risque de prendre un sacré bout de temps de farfouille r
dans les sous-contrôles du validateur pour rendre invisible le message,
sans empêcher qu'une nouvelle erreur le rende de nouveau visible.

En revanche, le validateur présente les propriétés ShowMessageBox e t
ShowSummary. En les mettant respectivement à true et false, on obtient
quelque chose qui, bien que me paraissant moins esthétique, est au moin s
fonctionnel, puisque le message d'erreur, comme le laisse entendre le
nom de la propriété, apparaît dans une boîte de message, que
l'utilisateur est invité à refermer après avoir lu.

Jusqu'à ce que quelqu'un m'indique quoi faire pour exploiter le
ShowSummary, je vais partir du principe que ce message qui reste visible
jusqu'à en faire apparaître un autre ou avoir réalisé une saisie
correcte est un bug du Validator, et puisqu'un autre mode permet
d'obtenir un résultat opérationnel, je vais utiliser cet autre mode,
tant pis pour l'esthétique.

J'ai par ailleurs une réponse pour exécuter un script en mode local :
dans la boîte à outils, on trouve dans la catégorie Standard un con trôle
Button (celui que j'utilise avec le Validator) et plus bas dans la
catégorie HTML un contrôle "Input (button)". Le premier s'exécute s ur le
serveur, le deuxième en local. Je vais en rester là jusqu'à ce que
quelqu'un me trouve un contrôle qui accepte de faire les deux.
_____________________________________
Gloops a écrit, le 15/08/2009 15:46 :
Bonjour tout le monde,

Les contrôles de validation sont bien pratiques pour afficher un mess age
d'erreur avec quasiment rien comme code à écrire.

Toutefois j'ai un souci avec. Le contrôle de validation m'affiche un
message pour dire qu'une adresse mail n'est pas valide, bon d'accord,
mais ce message reste affiché jusqu'à ce que, soit un autre type
d'erreur soit commis, soit une adresse mail correcte soit saisie.

ça fait que, pour peu que la machine cliente soit un peu lente,
l'utilisateur n'a absolument aucun moyen de savoir (sauf bien sûr à
vérifier par lui-même et auquel cas pourquoi diable n'a-t-il pas sa isi
correctement du premier coup ?) si l'adresse qu'il lui est reproché
d'avoir saisie incorrecte est celle qu'il vient de saisir, ou celle
qu'il a proposée la fois précédente qu'il a cliqué sur le bouto n. Il n'a
qu'à attendre pour voir si il va se passer quelque chose.

Ainsi donc, si il se confirme que ce n'est pas déjà prévu et que ce
n'est pas moi qui ai mal mis en œuvre les contrôles de validation, je
voudrais créer un script onchange sur le contrôle TextBox, à exé cuter en
local bien entendu, qui rende invisible le contrôle ValidationSummary .
Voilà qui ferait disparaître le message de l'écran dès qu'on en
tiendrait compte pour modifier le texte, et ainsi lorsque l'utilisateur
verrait réapparaître le message il saurait que c'est au sujet de sa
nouvelle saisie.

Or, pour faire ceci, je rencontre une incohérence, à moins encore u ne
fois que ce soit moi qui aie des trucs mal branchés dans la tête .. .
Le contrôle TextBox a une propriété obligatoire runat, mais cette
propriété ne peut avoir qu'une valeur possible, server. Alors je me
demande bien, puisque la plateforme sait déjà où exactement elle veut
exécuter ce script et quelle valeur elle accorde au choix du programm eur
à ce sujet, pourquoi diable elle impose à celui-ci de confirmer ce choix
qui ne lui convient pas.

En effet, soit on met un CauseValidation au TextBox et à chaque fois
qu'on va saisir un caractère il faudra attendre le PostBack, voilà qui
va être génial pour les gens connectés en RTC avec un modem 16 bp s, soit
on ne le met pas et le runat server ne sera exécuté que lorsqu'on
cliquera sur le bouton, et à ce moment le message suivant sera affich é,
donc il vaut autant ne rien faire.

J'ai l'impression que j'ai dû prendre un truc par le mauvais bout, ma is
quoi ?



Gilles TOURREAU
Le #20124681
Bonjour,

La propriété runat="server" est obligatoire pour indiquer à ASP .NET que la
balise correspond à un contrôle qui sera crée et chargé dans l'arborescence
des contrôles d'ASP .NET afin que vous puissiez manipuler ses propriétés en
C#.

Est-ce que cela répond à votre question ?

Cordialement

--
Gilles TOURREAU - MVP C#
E-Mail :
Site Web : http://gilles.tourreau.fr

Société P.O.S - Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

"Gloops" discussion :
Gilles TOURREAU - MVP C# a écrit, le 22/08/2009 21:40 :
Bonjour,

Pour faire ce genre de contrôle de validation sans réaliser de postback,,
vous devez programmer par vous même le code en JavaScript...

Cordialement




Bjr,

A vrai dire, oui, c'est un peu ça que j'ai essayé de faire. C'est un peu
pour ça que le runat=serveur pour le TextBox m'embête un peu. Y a-t-il
moyen de lui faire entendre raison ?





Gloops
Le #20127671
Gilles TOURREAU a écrit, le 12/09/2009 10:50 :
Bonjour,

La propriété runat="server" est obligatoire pour indiquer à ASP .NET que
la balise correspond à un contrôle qui sera crée et chargé dans
l'arborescence des contrôles d'ASP .NET afin que vous puissiez manipu ler
ses propriétés en C#.




C'est un petit peu ça qui me contrarie, justement, et du coup j'en
arrive à me dire que je n'ai pas su poser ma question. Merci tout de
même d'avoir tenté de me répondre.

J'ai découvert depuis que si on veut exécuter du JavaScript écrit m aison
sur la machine cliente lors de la modification du contenu d'une zone de
texte, il y a lieu d'utiliser non pas un TextBox asp, de la catégorie
Standard de la boîte à outils Visual Studio, mais un contrôle Input
(Text) qu'on trouve plus bas dans la catégorie HTML. Toutefois ce
faisant, on renonce au bénéfice des contrôles de validation.

Donc, finalement, le mieux que j'aie su faire avec le contrôle de
validation, comme je le dis ailleurs dans ce fil, consiste à jouer avec
les propriétés ShowMessageBox et ShowSummary du ValidationSummary, po ur
afficher le message d'erreur non sur la page, mais dans une boîte de
dialogue. C'est moins beau, mais fonctionnellement c'est clair. Je n'ai
pas testé sur tous les navigateurs existants il est vrai.

Autrement c'est vrai qu'on peut réécrire toute la boutique soi-même ,
mais alors autant coder avec le bloc-notes :)

Par ailleurs au cours d'une séance de mise en page, j'ai pu me rendre
compte que sur un contrôle de validation comme par exemple
RequiredFieldValidator, la propriété Visible signifie ce
qu'instinctivement j'aurais eu tendance à appeler Enabled. Si on met
False, le test n'est pas effectué, et le ControlToValidate (TextBox par
exemple) peut très bien être validé vide. Dans la réalité, avec
Visible=True, le message devient visible dans le ValidationSummary selo n
les propriétés de celui-ci et la valeur saisie. Ce qui fait que, si o n
veut, dans les propriétés du RequiredFieldValidator, le mot Visible
était disponible pour autre chose (ceci dit, il faut suivre :) ).

Par ailleurs, si la petite flèche rouge n'apporte rien, rien n'empêch e
de placer le contrôle de validation, avec Visible=True, dans une cell ule
de tableau non visible. Il sera opérationnel, mais sans trace à l'é cran
devant le contrôle validé. Concrètement, c'est plutôt dans les ca s où il
n'y a qu'une zone de texte à saisir qu'on sera tenté de faire comme ç a :
là, l'utilisateur se doute bien que si il a commis une erreur, c'est
là-dedans (enfin du moins, je l'espère ; enfin sauf à avoir placé la
zone de texte en haut à gauche de la page et le bouton en bas à droit e,
ou l'inverse ;) ).

Je crois qu'effectivement créer un événement qui se déclenche en local
sur la machine cliente à la modification d'un contrôle asp tient de l a
gymnastique de haut vol, du fait que ce n'est pas prévu comme ça, et du
coup vraisemblablement on sortirait de ce qu'on appelle code managé.
Peut-être une mise à jour corrigera-t-elle ce problème de message q ui
reste affiché une fois qu'il n'est plus d'actualité ?
Je me demande si même on pourrait créer un nouveau contrôle de
validation en ce sens. Il faudrait qu'il puisse exploiter la
modification du contrôle à valider, donc, retour à la case départ . Ou
alors, exploiter un changement de focus ? J'avoue que pour le moment, je
vais me contenter de laisser la question ouverte.

(A propos de l'usage de contrôles classiques à la place de contrôle s
asp, on observe la même chose lors de la création d'une page maître sse,
si les ContentPlaceHolders doivent être placés dans un tableau : il n e
faut surtout pas utiliser un tableau ASP, ou il sera ignoré dans la mis e
en page, mais il faut insérer les ContentPlaceHolders dans des balises
HTML classiques (<TABLE><TR><TD></TD></TR></TABLE>). Celles-ci
bénéficient d'ailleurs du contrôle de syntaxe avec l'Intellisense. Il
semble que ce soit plus commode pour faire ça d'afficher en mode Source
qu'en mode Design, si tant est d'ailleurs qu'on puisse faire autrement.)
Publicité
Poster une réponse
Anonyme