2011-02-07 17 views
6

Próbuję uzyskać walidację klienta działającą w MVC3 przy użyciu adnotacji danych. Przyjrzałem się podobnym postom, w tym tej MVC3 Client side validation not working dla odpowiedzi.MVC3/Razor Client Validation Not fireing

Używam modelu danych EF. Dla moich walidacji utworzyłem klasę częściową.

[MetadataType(typeof(Post_Validation))] 
public partial class Post 
{ 

} 

public class Post_Validation 
{ 
    [Required(ErrorMessage = "Title is required")] 
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")] 
    public string Title { get; set; } 

    [Required(ErrorMessage = "Text is required")] 
    [DataType(DataType.MultilineText)] 
    public string Text { get; set; } 

    [Required(ErrorMessage = "Publish Date is required")] 
    [DataType(DataType.DateTime)] 
    public DateTime PublishDate { get; set; } 
} 

Moja strona cshtml zawiera następujące elementy.

<h2>Create</h2> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Post</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Text) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Text) 
      @Html.ValidationMessageFor(model => model.Text) 
     </div> 
} 

Web Config:

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

Układ:

<head> 
<title>@ViewBag.Title</title> 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> 

Tak, prace tekstowe adnotacji wielowierszowe i tworzy pole tekstowe. Ale żadna z walidacji nie działa po stronie klienta. Nie wiem, czego może mi brakować. Jakieś pomysły?? W razie potrzeby mogę opublikować więcej informacji. Dzięki!

+0

Witam, to może nie być już aktywne, ale chcę tylko zapytać, jak rozwiązać ten problem? Mam do czynienia z dokładnie ten sam problem tutaj, ale moje nie można uzyskać walidacji dla pola tekstowego .. pomysł? Dzięki ... – shennyL

Odpowiedz

4

1.) spróbuj dodać następujące do widoku którego potwierdzania

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

nie uważam, że należy zmodyfikować Web.config, możesz więc usunąć

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

Powodzenia! Spróbuj również wprowadzić znaną złą wartość, aby sprawdzić, czy uruchomiono sprawdzanie poprawności strony klienta, że ​​wymagana adnotacja nie wydaje się wystarczająca do wyświetlenia komunikatu dla pustego wejścia.

2.) Umieść poniżej skrypty w swoim widoku, powinien działać.

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

To działa, ale moim problemem było to, że miałem appsettings w widoku \ web.config, a nie root \ web.config. Nie jestem pewien, w jaki sposób się pomylili, ponieważ domyślny projekt umieszcza je w konfiguracji głównej, ale rzuciło mnie to na pętlę. –

-4

Spróbuj zadeklarować przy użyciu publicznego obiekt:

public class Post_Validation 
{ 
    [Required(ErrorMessage = "Title is required")] 
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")] 
    public object Title { get; set; } 

    [Required(ErrorMessage = "Text is required")] 
    [DataType(DataType.MultilineText)] 
    public object Text { get; set; } 

    [Required(ErrorMessage = "Publish Date is required")] 
    [DataType(DataType.DateTime)] 
    public object PublishDate { get; set; } 
}