15

Chcę, podobnie jak sprawdzanie po stronie klienta, jako walidacja po stronie serwera. Ja sobie z tego sprawę, jak następuje:Asp.Net MVC EnableClientValidation nie działa

Model: (Model posiada DataModel (dbml), który zawiera klasę testową)

namespace MyProject.TestProject 
{ 
    [MetadataType(typeof(TestMetaData))] 
    public partial class Test 
    { 

    } 

    public class TestMetaData 
    { 
     [Required(ErrorMessage="Please enter a name.")] 
     [StringLength(50)] 
     public string Name { get; set; } 
    } 
} 

Controller to nic specjalnego.

Widok:

<% Html.EnableClientValidation(); %> 
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
      new AjaxOptions {}, new { enctype = "multipart/form-data" })) 
    {%> 
    <%= Html.AntiForgeryToken()%> 
    <fieldset> 
     <legend>Widget Omschrijving</legend> 
     <div> 
      <%= Html.LabelFor(Model => Model.Name) %> 
      <%= Html.TextBoxFor(Model => Model.Name) %> 
      <%= Html.ValidationMessageFor(Model => Model.Name) %> 
     </div> 
    </fieldset> 
    <div> 
     <input type="submit" value="Save" /> 
    </div> 
<% } %> 

Aby to wszystkie prace I dodał także odnośniki do plików JS:

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 

Ostatecznie musi pracować, ale robi to działa w 100%: Czyni sprawdza poprawność bez odświeżania strony po naciśnięciu przycisku. Wykonuje również "połowę" sprawdzania poprawności strony klienta. Tylko wtedy, gdy wpiszesz jakiś tekst w polu tekstowym, a następnie wrócisz do wpisanego tekstu. Zostanie wyświetlone sprawdzenie po stronie klienta. Ale kiedy próbuję tego, dotykając między kontrolkami, nie ma walidacji po stronie klienta.

Czy brakuje mi jakiegoś odniesienia lub czegoś? (Używam Asp.Net MVC 2 RTM)

Odpowiedz

5

zmienić kolejność załadowanego javascript ...

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

Miałem dokładnie ten sam problem i to nie straciła gola dla mnie ...

+0

[tutaj] (http://pastebin.com/685 AustrianTHH) to sposób sprawdzania poprawności na mojej stronie. Jednak sprawdzanie poprawności klienta nie działa w ogóle, czy widzisz jakiś problem? – Shimmy

1

Myślałem, że też czegoś brakuje, ale wiem, że wtyczka walidacji jQuery nie reaguje na mouseEnter/mouseLeave. Zgodnie z dokumentacją dla tej wtyczki w (na plug in page - poszukaj sekcji oznaczonej „kilka rzeczy zwrócić uwagę podczas zabawy z demo”):

Przed polem jest oznaczony jako nieważny, walidacji jest leniwy: przed złożeniem formularza po raz pierwszy, puszka zakładce użytkownik przez pola bez uzyskiwania irytujących wiadomości - on nie dostanie podsłuchu zanim miał szansę rzeczywiście wprowadzić poprawną wartość

Zakładam, że jest to ta sama reguła z walidacją po stronie klienta MVC 2. Nie jestem tego pewien, ponieważ dokumentacja nie mówi nic oprócz "działa na moim komputerze" :).

Poszedłem z trasą walidacji jQuery, która jest obsługiwana w MVC Futures (zauważ, że dokumentacja do tego nie istnieje). Aby go użyć, wystarczy zastąpić tagi skryptów dla MicrosoftAjax.js, MicrosoftMvcAjax.js i plików MicrosoftMvcValidation.js z tych dwóch znaczników:

<script src="/js/jquery.validate.js" type="text/javascript"></script> 
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script> 

zastępując ścieżkę z naszą.

Znalazłem również potrzebę aktualizacji do najnowszej wersji jquery.validate.js ze strony dewelopera, ponieważ używamy późniejszej wersji jQuery (1.4) tutaj.

Nadzieję, że pomaga.

+0

Zmodyfikowałem swój kod, opisując go, ale bez żadnych ulepszeń. Używam: jQuery 1.4.2 jQuery-validate 1.7 MicrosoftMvcJQueryValidation no versionNumber dostepny. Zmieniłem także odniesienie wewnątrz pliku .js Microsoft® MJJQueryValidation na /// , ale nadal nie ma ulepszeń. – Colin

1

... hm, to późno, by odpowiedzieć, ale spróbuj to:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script> 
Powiązane problemy