ASP .NET MVC Désactiver la Validation Côté Client à Chaque Niveau de Champ
Je suis à l'aide d'ASP .NET MVC 3, avec les Annotations de Données et le jQuery valider plugin.
Est-il un moyen de souligner qu'un certain domaine (ou à certains d'annotation de données) doivent être validés côté serveur?
J'ai un champ numéro de téléphone avec un masquage plugin sur elle, et l'expression régulière du programme de validation devient fou sur l'utilisateur final. La regex n'est qu'un "fail-safe" (au cas où quelqu'un décide de pirater le javascript de validation), donc je n'ai pas besoin de courir sur le côté client. Mais j'aurais quand même, comme les autres, la validation s'exécute côté client.
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si cette solution fonctionne sur MVC3. Il fonctionne sur MVC4:
Vous pouvez tout simplement désactiver la validation côté client dans le Rasoir, avant de rendre le terrain et de le ré-activer la validation côté client après que le terrain a été rendu.
Exemple:
Ici, nous avons désactiver la validation côté client pour la BatchId champ.
Aussi, j'ai développé une petite aide pour cela:
Vous permettra de l'utiliser comme suit:
Si quelqu'un a de meilleures solutions s'il vous plaît laissez-moi savoir!
Espérons que cette aide.
Vous pouvez désactiver côté client discrète de validation pour un champ unique par l'ajout d'un
data-val='false'
attribut:Cela va remplacer le
data-val='true'
attribut MVC ajoute en raison de touteSystem.ComponentModel.DataAnnotations
attributs. L'élément HTML sera toujours décorées avec d'autres attributs de validation (par exemple, les données-val-requis), mais ils n'auront pas d'effet.(Note le trait de soulignement dans
data_val
ci-dessus. MVC convertit automatiquement les caractères de soulignement pour les traits d'union dans les anonymes type de propriétés, de sortedata_val
devientdata-val
lors du rendu de l'HTML)MVC5 utiliser jquery.valider
http://jqueryvalidation.org/rules/
Si vous souhaitez supprimer des validations dans MVC5 Côté client, vous devez effectuer les opérations suivantes:
Supprimer toutes les validations sur "myinput'
Validations spécifiques
Liste les validations peuvent aider
Puis vous devez corriger votre Code Derrière pour valider manuellement votre modèle ou différemment parce que
ModelState.IsValid
sera fausse. À l'aide deModelState.Clear()
etTryValidateModel
peut alors être à portée de main.Edit:
La désactivation du contrôle également supprimer les validations.
En supposant que vous utilisez par défaut discrète de validation, Vous pouvez utiliser un peu de javascript pour supprimer des règles côté client. Jetez un oeil à Plugins/Validation/règles
Pour atteindre cet objectif dans le scénario donné, nous avons besoin de faire deux réglages.
Côté Client
Pour désactiver la validation côté client, nous avons besoin de le désactiver par la force.
Avis de @data_val= “false”. Il permet de désactiver la validation sur ce champ.
Côté Serveur (En Action)
Lorsque le modèle est validé sur le post de l'action, ModelState.IsValid renverra toujours false, car le mot de passe n'est pas fourni. Ici, nous avons à fournir le mot de passe actuel pour le modèle et Re-valider le modèle.
Laissez-moi vous expliquer, nous avons d'abord obtenir les informations enregistrées dans la base de données que nous utilisons plus tard, affecter à modèle actuel si le mot de passe n'est pas fourni. Les deux dernières lignes en fait réinitialiser le ModelState pour revenir résultat mis à jour sur ModelState.IsValid.
J'ai eu des soucis avec data_val="true". J'ai eu une séquence de boutons radio liée à une propriété unique dans mon modèle. La validation des données n'a travaillé que lorsque j'ai appliqué data_val="true" à la première @Html.RadioButtonFor appel.
Le débogage de cela, j'ai découvert que vous pouvez également désactiver ou modifier les règles sur le côté client en utilisant data_rule_??. Le règlement peut être consulté dans le jquery de validation la documentation.
par exemple;
Si vous souhaitez supprimer des validations dans MVC5 Côté client, vous devez effectuer les opérations suivantes: