2009-07-06 7 views
0

J'essaie de passer par ce tutoriel tutorial. Ce tutoriel semble faire tout ce que je cherchais mais j'ai du mal à essayer de le comprendre. Peut-être parce que je ne connais pas assez Xval, jquery.validate. Il semble utiliser une vue typée: RemoteValidation.Models.User. Que se passe-t-il si je veux transmettre d'autres données, comment pourrais-je obtenir cela? Est-ce que je dois faire un autre magasin de classe le modèle d'utilisateur et les autres choses que je veux dedans?Quelqu'un peut-il m'aider à mieux comprendre ce tutoriel?

2ème

Je confonds beaucoup par l'article puisque c'est suppost être comme client et côté serveur validtion mais il ajoute des lignes comme

« // ajouter en option RegEx validateur pour minimiser les demandes ajax »

donc, pour moi, ce rasies la question de je pensais qu'ils avaient déjà cela en place:

[RegularExpression(EmailRegEx, ErrorMessage = "Invalid e-mail address.")]” 

Puis il a ce

« Par exemple, tout ce que vous aurez besoin de mettre en œuvre pour le serveur et à distance la validation de la force du mot de passe côté client est la suivante: »

public class IsSafePasswordAttribute : RemotePropertyValidator 
{ 

public IsSafePasswordAttribute() 
{ 
//perform some simple password strength check with a regular expression 
//on the client side first 
ClientSideRegEx = “.{8,20}”; 
} 

protected override bool PropertyValid(object value) 
{ 
//Insert more elaborate server-side/remote client side password checking 
// logic and return result here… 
} 

Alors si vous lisez les commentaires, il semble que le constructeur est pour le côté client et cette PropertyValid est pour le côté serveur?

Est-ce correct? Que se passe-t-il si je veux juste la même chose pour le client et le serveur?

Mais il a cette

protected override bool PropertyValid(object value) 
{ 
return (string)value != “[email protected]”; 
} 

Ce code est exécuté comme si elle était juste du côté client.

Je ne suis pas

ClientSideRegEx = “.{8,20}”; 

Tout d'abord cela me dit vraiment qu'il est seulement le InfoClient si cela signifie que je devrais écrire le même code pour le côté serveur? Je pensais que c'était tout le but de ceci de ne pas écrire le même code deux fois?

De même, n'ont-ils pas l'un de ces "[]" pour la gamme comme ils l'ont pour nécessaire? Je pense que ce serait un très basique alors de quoi auriez-vous besoin de faire votre propre?

Je ne comprends pas non plus comment il a compris que c'était comme cela que ça devait être entré. Comme il y a tellement de documentation que je peux regarder. Je sais que c'est une expression regex mais je m'interroge sur d'autres validations et autres.

[fichiers dans la démo]

Je ne sais pas ce que l'ensemble de je devrais être en train de changer et ce que je peux laisser seul. Comme si je commençais un nouveau projet et que je commençais ma validation, est-ce que j'incluais ces fichiers?

DataAnnotationsModelBinder.cs ExtensionMethods.cs RemoteValidators.cs

Plus, bien sûr, les fichiers xval. Dois-je changer un de ces fichiers .cs? Ou puis-je les utiliser tels quels? Comme je viens de commencer à hériter le "RemotePropertyValidator" et commencez simplement à taper ou dois-je faire d'autres changements? Puis, sur une note de côté, font-ils encore Xval que je regardais sur le site et son seul 0.8 (et seulement bêta encore) en ce moment et n'a pas été mis à jour dans quelques mois. J'ai posté cette question "si elles étaient encore en cours de développement" et aucune réponse pour le moment.

Cela me donne un sentiment mal à l'aise.

Merci

P.S Je suis ouvert d'utiliser d'autres choses alors xval si elle peut faire la même chose (plus facile). Tant qu'il se connecte avec jquery et asp.net mvc.

Répondre

1

Je vais seulement répondre à quelques-unes des questions les plus difficiles que vous avez posées et aborder les grands principes. J'espère que cela vous aidera un peu.

1) Non, vous n'avez pas besoin d'utiliser des vues fortement typées. Je ne fais jamais. Personnellement, je préfère le MVCContrib fortement typé viewdata.get (viewdata.get ("user");).

2) Oui, le xVal (et d'autres bibliothèques similaires) vous aident à faire la même chose côté serveur et côté client. Cependant ... vous devez d'abord configurer les règles de validation.

Pour des choses comme [Required] ou [StringLength] cela a déjà été fait pour vous. Mais il y aura toujours la possibilité que vous ayez besoin d'une validation plus compliquée. Et dans ce cas, vous devez définir les routines séparément (différentes langues, différents éléments, modification de l'accès aux données (bases de données sur le serveur)).

L'attribut IsPasswordSafe est un bon exemple. Le constructeur définit simplement l'expression régulière javascript (dans ce cas, ". {8,20}" renvoie true si la valeur est comprise entre 8 et 20 caractères) - une vérification TRES simple. Ma supposition est qu'après que cette chaîne soit définie dans le constructeur, les fonctions responsables de la création du javascript client le liront. Sur le côté serveur (la méthode PropertyValid()), vous pouvez faire des choses plus intensives - vérifier un dictionnaire, vérifier les mots de passe précédents de cet utilisateur, etc - qui ne pourraient pas être fait localement.

Je vous suggère de relire l'article en tenant compte de ce qui précède et de jouer un peu, et j'espère que tout deviendra plus clair. Sur une note personnelle, je viens de commencer à utiliser xVal et j'en suis plutôt content. Je n'ai pas eu de validation personnalisée (peut-être devriez-vous commencer à jouer avec les trucs DataAnnotations inclus). Mais l'un des points de xval est que vous n'avez pas besoin de savoir quoi que ce soit à propos de jquery.validate. Sachez simplement que le côté serveur et le côté client ne doivent pas toujours être - et parfois ne peuvent pas être - synchronisés, en termes de validation.

James

+0

Merci. Ya je relis l'article à nouveau et mes questions ont été répondues par le gars. Maintenant que je l'ai parcouru ligne par ligne avec le débogueur, je le comprends plus. – chobo2

+0

La seule chose que je ne suis pas encore clair, mais je ne l'ai même pas regardé est. Si je veux faire une autre regex. Dois-je utiliser la même propriété ou puis-je faire une nouvelle propriété. Bien sûr, je pourrais aussi juste d'utiliser l'étiquette prédéfinie pour regex et sauter la propriété tous ensemble. – chobo2

0

Dans ma compréhension, l'article décrit deux façons différentes de validation du client:

  1. validation client à distance, où client envoie une requête AJAX à serveur, serveur demandant de valider. Ceci est différent de côté serveur pur validation car il n'a pas nécessitent rechargement de page.L'article montre comment effectuer la validation client à distance sans aucun code supplémentaire.

  2. client pur validation , c'est ce que ClientSideRegEx est utilisé pour - dans ce cas il n'y a pas de demande de serveur du tout, mais plus de code est nécessaire.

En ce qui concerne RemoteValidation.Models.User - vous pouvez passer une autre classe, tant qu'il utilise des attributs d'annotation sur ses propriétés.