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 :

Comment ne causer la validation que des champs affichés


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Comment ne causer la validation que des champs affichés
    Bonjour,

    J'ai un fieldset dans ma page qui est par défaut caché, il est montré lorsque je clique sur une checkbox. Cela fonctionne très bien.
    Le soucis c'est que j'ai mis des validators sur mes champs à coté de la checkbox, cela fonctionne, mais je veux aussi en mettre sur les éléments à l'intérieur de mon fieldset qui se cache sauf que ils ne doivent se déclencher que si ma checkbox est cochée (ie: quand il est affiché).

    J'ai testé, et si je met un RequiredFieldValidator sur l'un des champs même si le champ est caché il demande la validation.

    Est-ce qu'il y a un moyen de ne provoquer la validation que si et seulement si le fieldset est affiché?
    Ou est-ce que je dois faire la validation moi-même en javascript?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Points : 191
    Points
    191
    Par défaut
    Il est possible d'activer ou désactiver manuellemetn la validation d'un requiredFieldValidator de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    requiredField.IsValid = false;
    tu peux donc activer ou désactiver à ta guise du côté client quand le statut de ton checkbox est coché ou non.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Merci pour l'information.

    Par contre le fait de cacher ou non le fieldset se fait dynamiquement coté client.
    Je ne vais pouvoir mettre true ou false sur mes RequiredFieldValidator que lors du chargement de la page ou lors du PostBack.

    Si j'utilise ta ligne je vais désactiver le Validator mais si on coche la case il faut que coté client ça réactive le Validator et si on la décoche ça l'invalide.

    Je ne sais pas si je suis bien clair ou non :s

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Désactives le validator en js

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réponses, elles ont portées leurs fruits.

    Donc j'ai cherché du côté désactiver le validator avec du javascript, j'ai trouvé ceci :
    http://msdn.microsoft.com/en-us/library/aa479045.aspx
    Dans la partie Client-site API, j'ai vu la fonction ValidatorEnable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValidatorEnable(document.getElementById(validator1),true);
    Et cela fonctionne.

    Lorsque mon fieldset est caché, il ne me réclame plus le validator et quand on l'affiche il le redemande.

    Pour ceux qui veulent le code complet de ma solution ci-dessous.
    Merci encore.

    La fonction Javascript:
    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
    16
    17
    18
    19
    20
    21
    22
    function ShowHideHazardForm(chkboxId, panelId, hazardValidator1, hazardValidator2, hazardValidator3)
      {
        if (!document.getElementById(chkboxId).checked){
          document.getElementById(panelId).style.display="none";
          HazardAreaValidatorEnable (hazardValidator1, hazardValidator2, hazardValidator3, false);
        }else{
          document.getElementById(panelId).style.display="block";
          document.getElementById(panelId).style.visibility="visible";
          HazardAreaValidatorEnable (hazardValidator1, hazardValidator2, hazardValidator3, true);
          document.getElementById(hazardValidator1).style.visibility = "hidden";
          document.getElementById(hazardValidator2).style.visibility = "hidden";
          document.getElementById(hazardValidator3).style.visibility = "hidden";
     
        }
      }
     
      function HazardAreaValidatorEnable (val1, val2, val3, enable)
      {
        ValidatorEnable(document.getElementById(val1),  enable);
        ValidatorEnable(document.getElementById(val2),  enable);
        ValidatorEnable(document.getElementById(val3),  enable);
      }
    Le controle ASP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <asp:CheckBox ID="ishazard" runat="server" />
    Sur chacun des validators j'ai rajoute l'attirbut Enabled="false" pour desactiver par defaut le validator quand on arrive sur le page, il n'est reactive que par le clique sur la checkbox
    La fonction pour ajouter evenement javascript sur l'événement onclick de la checkbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ishazard.Attributes.Add("onclick", "ShowHideHazardForm('" + ishazard.ClientID + "', '" + panelhazard.ClientID + "', '" + reqhazardcause.ClientID + "', '" + reqmfgprohazardcode.ClientID + "', '" + reqhazardtime.ClientID + "')");

  6. #6
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Il reste un cas ou il y a un soucis.
    J'affiche mon fieldset, je valide ma page sans remplir les champs, donc les validators se déclenchent et dans mon ValidatorSummary je vois les errorMessages, si maintenant je cache le fieldset, les messages restent jusqu'à ce que je revalide la page. Problème de rafraichissement donc.
    Y a-t-il un moyen pour relancer la validation pour que le ValidatorSummary se mette à jour dès que je coche la case (ie: une fonction javacript)?

    J'ai déjà fait quelques essais avec les fonctions suivantes qui n'ont données aucun résultat(fonctions mise dans la partie "Then" du if dans la fonction "ShowHideHazardForm"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ValidatorValidate(hazardValidator1);
    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit();
    J'ai trouvé une solution qui consiste a éditer avec du javascript le innerHTML de l'élément ValidatorSummary et de supprimer les phrases que je veux faire disparaitre, mais ca ne me parait pas être une solution tres propre.

  7. #7
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    tu pourrais faire une fonction javascript qui efface le validation summary a chaque action client qui change le comportement de tes validators.

    -> par exemple, tu appelle cette fonction quand tu clique sur le bouton qui cache ton fieldset

  8. #8
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par gdkenny Voir le message
    tu pourrais faire une fonction javascript qui efface le validation summary a chaque action client qui change le comportement de tes validators.

    -> par exemple, tu appelle cette fonction quand tu clique sur le bouton qui cache ton fieldset
    => Tu veux dire qu'au lieu de rafraichir ou edit le ValidatorSummary je le cache tout simplement ?
    C'est une idée, Je pense que je vais tenté.
    Je ne vais pas pouvoir la tenter de suite car je refais un peu tout en ce moment en "mieu" du moins je l'espere .

    Merci pour cette idée je vais la prendre en considération si je ne trouve pas autrement.

Discussions similaires

  1. [Validator] coloration des champs non renseignés
    Par ptitom1381 dans le forum Struts 1
    Réponses: 18
    Dernier message: 30/12/2008, 20h54
  2. Validation automatique des champs d'un formulaire
    Par LuneArgentee dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/04/2008, 13h39
  3. Réponses: 11
    Dernier message: 12/03/2008, 16h25
  4. Ne valider que les champs <INPUT TEXT apparent
    Par bilou95 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 25/05/2007, 16h14
  5. comment imposer de ne rentrer que des numérique dans un Edit?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 4
    Dernier message: 23/10/2006, 14h23

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