2010-10-13 6 views
4

Deux choses:Quels contrôles ont déclenché la Page.IsValid = false?

  1. Est-il possible de définir la propriété Page.IsValid (is_valid) par Jquery pour que je ne dois utiliser les validateurs ASPX? Est-ce que je comprends que la propriété IsValid est en lecture seule?

  2. Lorsque les validateurs sont entrés, est-il possible de savoir, par le biais de Jquery (bien sûr) quels contrôles ont fait échouer la validation? Un exemple serait un formulaire avec des tas de zones de texte: l'utilisateur clique sur le bouton et j'obtiens mes résultats dans un résumé de validation. Tout va bien et dandy. Mais je veux aussi que les utilisateurs sachent quels contrôles ils sont en changeant l'arrière-plan de la zone de texte respective pour dire, rouge.

Maintenant le hack car ce serait que j'appelle ma propre fonction JS qui vérifie toutes les zones de texte de validation (encore une fois), puis modifiez le code CSS pour les invalides sont rouges. Mais j'aurais pensé qu'il devait sûrement y avoir un moyen d'identifier quels contrôles ont échoué à la validation?

Un aperçu?

Répondre

3

(A) n'est pas possible. Page.IsValid est défini par la validation côté serveur et le client ne doit pas jouer avec lui. La validation côté client ne publie pas si elle échoue de toute façon, donc Page.Validate() n'est même pas appelé dans ce cas. Le AJAX Control Toolkit atteint (B) en reliant les fonctions de validation. Vous pouvez essayer quelque chose comme le suivant:

[Avertissement: Je ne suis pas aussi familier avec jQuery (encore), donc je vais utiliser JS simple. Ne hésitez pas à traduire les idiomes jQuery appropriés.]

for (var i = 0; i < window.Page_Validators.length; ++i) { 
    var validator = window.Page_Validators[i]; 
    validator.__old_evaluationfunction = validator.evaluationfunction; 
    validator.evaluationfunction = function(value) { 
     var element = validator.controltovalidate; 
     if (!validator.__old_evaluationfunction(value)) { 
      // Validation failed - turn `element` red, scream at the user, etc. 
      return false; 
     } else { 
      // Validation succeeded - restore `element` to its normal state. 
      return true; 
     } 
    }; 
} 
+0

pour une raison quelconque la validation ne se déclenche pas avec validateurs d'expression régulière. Une idée?? –

+0

il débogué et c'était quelque chose de mal à ma fin. Bravo pour une réponse merveilleuse –

2

Tous les contrôles de validation effectuent la validation du serveur à coup sûr. Remplacer isvalid = false du côté client ne peut qu'empêcher la publication. Au côté serveur et côté client, vous pouvez énumérer à travers la collection de validateurs et chaque ctrl possède la propriété IsValid.

Questions connexes