IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Contrôle de Validation côté client


Sujet :

ASP.NET

  1. #1
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut Contrôle de Validation côté client
    Bonjour à tous,

    Je suis en train d'essayer d'implémenter un contrôle de validation personnalisé.
    J'aimerais que ce contrôle effectue une validation côté client quand cela est possible. Malheureusement, je coince sur un problème pour lequel je n'ai trouvé quasi aucune information (même pas sur MSDN).

    Lorsque j'arrive sur ma page, le contrôle déclenche une erreur JavaScript signalant que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValidatorHookupControlID is not defined !
    (il s'agit de la méthode qui va demander la validation client pour le contrôle lorsqu'il perdra le focus.)

    Quelqu'un a-t-il une piste ?

    Merci.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu as un controle de validation sur ta page ?
    si non, la ressource js contenant le framework de validation client n'est peut-etre pas chargée

    que renvoit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(typeof(Page_Validators));
    si c'est "undefined", alors c'est ca

    ton validator personnalisé implémente-t-il IValidator (ou hérite de BaseValidator) ?

  3. #3
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Citation Envoyé par nico-pyright(c) Voir le message
    tu as un controle de validation sur ta page ?
    si non, la ressource js contenant le framework de validation client n'est peut-etre pas chargée

    que renvoit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(typeof(Page_Validators));
    si c'est "undefined", alors c'est ca

    ton validator personnalisé implémente-t-il IValidator (ou hérite de BaseValidator) ?
    En fait, pour faire simple, il s'agit d'un contrôle qui s'auto-valide. Par exemple, un textbox mais qui implémente l'interface IValidator.

    Cependant, alert(typeof(Page_Validators)), placé en StartupScript me renvoie bien undefined

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si tu implémentes IValidator, il faut que tu fasses savoir à la page que tu es un validator en t'enregistrant dans la collection de validator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.Validators.Add(this);
    Il faudra également le supprimer à l'unload

    Ceci est fait automatiquement en dérivant de BaseValidator

  5. #5
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Arf... J'y ai cru pendant un instant... car j'avais en effet oublier d'ajouter mon contrôle comme contrôle de validation...

    Mais cependant l'erreur subsiste...

    ValidatorHookupControlID is not defined

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si tu utilises firefox et que tu disposes d'un outil comme firebird, tu pourrais savoir si le fichier contenant toutes les fonctions du framework client de validation est présent.

    Tu as ca ? Comment ca, on pourrait vérifier si ta page est reconnue comme ayant des validateurs.

    Ensuite, tu peux essayer de boucler depuis ta page aspx, genre, dans le OnPreRender, sur la collection de validator, histoire de vérifier qu'il trouve bien le tien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (BaseValidator validator in Page.Validators)
    {
    }

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ah oui, il manque un truc.
    Si tu n'hérites pas de BaseValidator, il faut inclure le js à la main je crois.

    Un ptit coup de reflector

    Et on a un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        if (!this.Page.IsPartialRenderingSupported)
        {
            if (!this.Page.ClientScript.IsClientScriptBlockRegistered(typeof(BaseValidator), "ValidatorIncludeScript"))
            {
                this.Page.ClientScript.RegisterClientScriptResource(typeof(BaseValidator), "WebUIValidation.js");
                this.Page.ClientScript.RegisterStartupScript(typeof(BaseValidator), "ValidatorIncludeScript", "\r\n<script type=\"text/javascript\">\r\n<!--\r\nvar Page_ValidationActive = false;\r\nif (typeof(ValidatorOnLoad) == \"function\") {\r\n    ValidatorOnLoad();\r\n}\r\n\r\nfunction ValidatorOnSubmit() {\r\n    if (Page_ValidationActive) {\r\n        return ValidatorCommonOnSubmit();\r\n    }\r\n    else {\r\n        return true;\r\n    }\r\n}\r\n// -->\r\n</script>\r\n        ");
                this.Page.ClientScript.RegisterOnSubmitStatement(typeof(BaseValidator), "ValidatorOnSubmit", "if (typeof(ValidatorOnSubmit) == \"function\" && ValidatorOnSubmit() == false) return false;");
            }
        }
        else
        {
            ValidatorCompatibilityHelper.RegisterClientScriptResource(this, typeof(BaseValidator), "WebUIValidation.js");
            ValidatorCompatibilityHelper.RegisterStartupScript(this, typeof(BaseValidator), "ValidatorIncludeScript", "\r\n<script type=\"text/javascript\">\r\n<!--\r\nvar Page_ValidationActive = false;\r\nif (typeof(ValidatorOnLoad) == \"function\") {\r\n    ValidatorOnLoad();\r\n}\r\n\r\nfunction ValidatorOnSubmit() {\r\n    if (Page_ValidationActive) {\r\n        return ValidatorCommonOnSubmit();\r\n    }\r\n    else {\r\n        return true;\r\n    }\r\n}\r\n// -->\r\n</script>\r\n        ", false);
            ValidatorCompatibilityHelper.RegisterOnSubmitStatement(this, typeof(BaseValidator), "ValidatorOnSubmit", "if (typeof(ValidatorOnSubmit) == \"function\" && ValidatorOnSubmit() == false) return false;");
        }

  8. #8
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Bon, le problème vient apparemment bien du fait que la page ne charge pas les scripts de validation client.

    Par contre pour la boucle dans les contrôles de validation, mon contrôle est bien repris dans la collection....

    Je suis sur que ça doit être une bêtise mais ça m'énerve !!

    Merci pour ton aide en tout cas

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    comme on a posté en meme temps, je ne sais pas si tu as vu ma réponse

  10. #10
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Mais comment disposer du WebUIValidation.js ???

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    comme ca, ca suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            protected override void OnPreRender(EventArgs e)
            {
                if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(BaseValidator), "ValidatorIncludeScript"))
                {
                    Page.ClientScript.RegisterClientScriptResource(typeof(BaseValidator), "WebUIValidation.js");
                    Page.ClientScript.RegisterStartupScript(typeof(BaseValidator), "ValidatorIncludeScript", "\r\n<script type=\"text/javascript\">\r\n<!--\r\nvar Page_ValidationActive = false;\r\nif (typeof(ValidatorOnLoad) == \"function\") {\r\n    ValidatorOnLoad();\r\n}\r\n\r\nfunction ValidatorOnSubmit() {\r\n    if (Page_ValidationActive) {\r\n        return ValidatorCommonOnSubmit();\r\n    }\r\n    else {\r\n        return true;\r\n    }\r\n}\r\n// -->\r\n</script>\r\n        ");
                    Page.ClientScript.RegisterOnSubmitStatement(typeof(BaseValidator), "ValidatorOnSubmit", "if (typeof(ValidatorOnSubmit) == \"function\" && ValidatorOnSubmit() == false) return false;");
                }
                base.OnPreRender(e);
            }
    C'est un fichier de resource

  12. #12
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Effectivement, cela ne génère plus d'erreur...

    Malheureusement cela ne fonctionne quand même pas mais je pense que c'est du à l'architecture du contrôle qui est en fait un compositeControl.

    J'y ai dès lors intégré un CustomValidator pour lequel j'intègre la vérification que je souhaite effectuer côté client.

    Là où ça coince : la validation s'effectue correctement mais le postback n'est pas annulé en cas de validation client échouée. Je positionne pourtant bien le flag IsValid à false...

    Merci pour ton aide en tout cas...

  13. #13
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si t'as un projet minimal qui reproduit le problème, je veux bien jeter un coup d'oeil

  14. #14
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Merci pour ton aide Nico...

    En tentant de construire un petit projet pour reproduire le problème, je suis tombé sur la source du problème. En fait le bouton qui provoquait le submit n'était pas tout à fait d'origine.

    En fait, le bouton en question se désactive via javascript avant de provoquer manuellement un postback (via GetPostBackReference).. ce qui apparemment ne vérifie pas la validité de la page avant de provoquer le postback.

    Temporairement, j'ai désactivé cette fonctionnalité et cela fonctionne... je verrai par après si je sais mettre en place une solution similaire.

    Merci encore pour t'être penché sur le sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ASP.Net - Contrôle de validation
    Par samworld dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/09/2007, 13h52
  2. ASP.Net - Contrôle de validation
    Par samworld dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 09/09/2007, 09h45
  3. [Validator] erreur client+serveur lors de la validation
    Par PoichOU dans le forum Struts 1
    Réponses: 18
    Dernier message: 11/06/2007, 11h33
  4. Réponses: 2
    Dernier message: 28/09/2006, 17h16
  5. [ Struts ] Validator côté client
    Par acheda dans le forum Struts 1
    Réponses: 12
    Dernier message: 31/03/2005, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo