2013-05-29 11 views
17

Próbujesz nauczyć się podstaw ASP.net MVC i nie mogę zrozumieć, dlaczego moja walidacja po stronie klienta nie działa.MVC 4 Walidacja po stronie klienta nie działa

mam to w obu moich plików web.config (1 ma charakter globalny 1 znajduje się w folderze poglądów)

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

mam to w moim _layout.cshtmlfile

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

To jest mój widok modelu, dla których im Rejestracja testowania:

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; } 
    } 

A to moja 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" /> 


} 

Nie chcę publikować tutaj, przeczytałem kilka tematów tutaj związanych, ale nie mogę wydawać się naprawić moich problemów, kiedy klikam przesłać to robi post/uzyskać wnioski.

+3

Nie pamiętam dokładnie, ale jest kolejność plików załadowanych '_layout.cshtmlfile' poprawić? czy nie pominąłeś js z pierwszego stwierdzenia i czy sprawdziłeś pliki załadowane do przeglądarki? –

+0

Wyświetl źródło pokazuje wszystkie załadowane pliki. – Larry

+3

Czy próbowałeś wczytać plik validate.min.js przed validate.unobtrusive.min.js – Adil

Odpowiedz

22

Feels like to powinno działać, myślę, że trzeba załadować validate.min.js przed validate.unobtrusive.min.js

+0

Już objęte, to była odpowiedź, ale komentarze powyżej nie mogą być oznaczone jako poprawne!Dzięki – Larry

+0

Tak, skomentowałem powyżej, ale potem zrozumiałem, że jako odpowiedź może być pomocna dla innych – Adil

+0

Oznaczone jako poprawne, dziękuję :) – Larry

2

To dlatego, że nie ładuje jquery.validate.min.js przed dyskretny.

3

na swojej stronie masz te dwa linię w dolnej części strony

proszę Patrz uważnie

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 
+0

Dodałem już ten skrypt na konkretnej stronie. –

8

Miałem podobny problem, a jedyną rzeczą, która stałą było ręcznie zadzwoń pod numer

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

, zanim naciśnie przycisk przesyłania.

Wreszcie umieściłem go w oddzwanianiu gotowym do dokumentu.

$(function() { 
    $.validator.unobtrusive.parse($('form')); 
}); 
+0

Po wypróbowaniu wielu rozwiązań bez powodzenia, ten działa bardzo dobrze. Dzięki – IFink

+0

Zauważyłem ten problem po pakiecie moich skryptów w BundleConfig.cs i moje wywołanie '$ ('# nameOfForm"). Validate(); 'nie działa. Po dodaniu tej linii zaczęło działać, więc dziękuję bardzo –

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

Uwaga: Jest to konieczne, jeśli ładujesz „form” lub „PartialView” dynamicznie wewnątrz „div” za pomocą ajax wzywa

0

Trzeba tylko odwoływać się do tych plików na każdej stronie trzeba walidacji mój przyjaciel!

<script src="~/Scripts/jquery.validate.js"></script>  
Powiązane problemy