2015-02-06 28 views
7

Mam aplikację MVC 5 i używam adnotacji danych, aby wykonać większość weryfikacji. Jedną z właściwości w moim klasy wygląda następująco:MVC5 - Adnotacje danych - nie sprawdza się walidacja po stronie klienta?

[Required(ErrorMessage = "Please enter a business name")] 
[StringLength(80)] 
public string BusinessName { get; set; } 

Walidacja działa, ale nie wydaje się dzieje w przeglądarce jak myślałem, że powinno. Na mojej stronie mam przycisk Zapisz. Gdybym opuścić pole nazwa firmy puste i kliknij przycisk Zapisz, post odbywa się do metody kontrolera, który wygląda, częściowo, w następujący sposób:

[HttpPost] 
    public ActionResult Create(Advertiser advertiser, FormCollection collection, HttpPostedFileBase file) 
    { 
     // Before we do anything, let's check to make sure any validation that's already been done is clean. 
     if (!ModelState.IsValid) 
     { 
      return View(advertiser); 
     } 
    ... 
    ... 
} 

Kiedy ta metoda jest wykonywana, państwo model jest już ustawiony na nieprawidłowy. Jest to dobre, ponieważ jest nieważne, ponieważ pole Nazwa firmy jest puste. Jednak czy ta walidacja nie powinna mieć miejsca w kliencie?

Pole w moim .cshtml pliku wygląda następująco (przy użyciu Bootstrap):

<div class="form-group"> 
    @Html.Label("Business Name", new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     @Html.TextBoxFor(model => model.BusinessName, new { @class = "form-control", title = "", autofocus = true }) 
     @Html.ValidationMessageFor(model => model.BusinessName) 
    </div> 
</div> 

Moja Web.Config jest prawidłowo ustawiony w następujący sposób:

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
+0

Jaki jest twój znacznik cshtml? (Twój widok ... jaki jest kod) –

+0

@Ahmedilyas - Zmodyfikowałem swój post, aby dodać znaczniki. –

+0

możliwy duplikat sprawdzania poprawności strony klienta MVC3 nie działa] (http://stackoverflow.com/questions/4706174/mvc3-client-side-validation-not-working) –

Odpowiedz

10

znalazłem mój problem. W moich BundleConfig.cs mam następujące:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.min.js", 
       "~/Scripts/jquery-ui-1.10.4.min.js", 
       "~/Scripts/jquery.base64.js" 
       )); 

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
       "~/Scripts/jquery.validate.min.js", 
       "~/Scripts/jquery.validate.unobtrusive.min.js" 
       )); 

Ale czego nie zdaje sobie sprawy, że jqueryval wiązka nie dostaje załadowany w pliku _Layout.cshtml domyślnie. Więc musiałem dodać to, co następuje:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 
@Scripts.Render("~/bundles/bootstrap") 
@RenderSection("scripts", required: false) 

Kiedy to zrobiłem, działa tak, jak powinno. Oczywiście spowoduje to załadowanie go na wszystkie strony. To może nie być pożądane. Jeśli nie, załaduj go osobno na każdą stronę, jeśli to konieczne.