web-dev-qa-db-fra.com

La validation côté client de MVC 4 ne fonctionne pas

Essayer d'apprendre les bases d'ASP.net MVC et ne pas bien comprendre pourquoi la validation côté client ne fonctionne pas.

J'ai cela dans mes deux fichiers web.config (1 est global 1 est dans le dossier de vues)

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

J'ai ceci dans mon _layout.cshtmlfile

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")

Voici mon modèle de vue pour lequel je teste l'enregistrement:

public class RegisterVM
    {
        [Required(ErrorMessage="Username Required")]
        public string username { get; set; }

        [RegularExpression(@"((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})")]
        [Required(ErrorMessage="Password Required")]
        public string password { get; set; }

        [Compare("password", ErrorMessage="Passwords do not match")]
        public string passwordConfirm { get; set; }
    }

Et c'est mon html

@using(@Html.BeginForm()){

    @Html.LabelFor( model => model.username)
    @Html.EditorFor( model => model.username)
    @Html.ValidationMessageFor( model => model.username)<br />

    @Html.LabelFor( model => model.password)
    @Html.PasswordFor( model => model.password)
    @Html.ValidationMessageFor( model => model.password)<br />

    @Html.LabelFor( model => model.passwordConfirm)
    @Html.EditorFor( model => model.passwordConfirm)
    @Html.ValidationMessageFor( model => model.passwordConfirm)<br />

    <input type="submit" value="Register" />


}

Je ne voulais pas poster ici, je lis quelques sujets sur ceux-ci mais je n'arrive pas à résoudre mes problèmes, quand je clique sur Soumettre, c'est pour faire des demandes de publication/recevoir.

22
Larry

On se sent comme ça devrait marcher , je pense que vous devez charger validate.min.js avant validate.unobtrusive.min.js

25
Adil

J'ai eu un problème similaire et la seule chose qui l'a corrigé était d'appeler manuellement

 $.validator.unobtrusive.parse($('form'));

avant que j'appuie sur le bouton d'envoi.

Je l'ai finalement mis dans le rappel de document prêt.

$(function () {
    $.validator.unobtrusive.parse($('form'));
});
10
Gudradain

Dans votre page, vous avez ces deux lignes en bas de la page

s'il vous plaît voir attentivement 

@section Scripts {
 @Scripts.Render("~/bundles/jqueryval")
}
3
J.B.Vala

C'est parce que vous ne chargez pas jquery.validate.min.js avant celui discret.

2
Amin Saqi
$('#divParent').load("url",
                     function () {
                     $.validator.unobtrusive.parse($('form'));}
                );

Remarque: Ceci est requis si vous chargez 'formulaire' ou 'PartialView' dynamiquement dans 'div' à l'aide d'appels ajax

0
Jagdeesh Motegowda

Vous avez juste besoin de référencer ces fichiers sur chaque page dont vous avez besoin de validation mon ami!

<script src="~/Scripts/jquery.validate.js"></script>