2015-02-06 12 views
7

Tôi có ứng dụng MVC 5 và tôi đang sử dụng chú thích dữ liệu để thực hiện phần lớn xác thực. Một trong các thuộc tính trong lớp của tôi trông giống như sau:MVC5 - Chú thích dữ liệu - Xác thực bên ứng dụng khách không xảy ra?

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

Xác thực đang hoạt động nhưng dường như không xảy ra trong trình duyệt như tôi nghĩ. Trên trang của tôi, tôi có một nút Save. Nếu tôi rời khỏi sân Tên doanh nghiệp trống và bấm Save, một bài được thực hiện đến một phương pháp điều khiển trông giống, một phần, như sau:

[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); 
     } 
    ... 
    ... 
} 

Khi phương pháp này được thực thi, tình trạng mô hình đã được thiết lập không hợp lệ. Điều đó là tốt vì nó không hợp lệ vì trường Tên doanh nghiệp trống. Tuy nhiên, không nên xác thực này xảy ra trong khách hàng?

Các trường trong tệp .cshtml của tôi trông như sau (sử dụng 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> 

Web.Config của tôi được thiết lập một cách chính xác như sau:

<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

Đánh dấu cshtml của bạn là gì? (quan điểm của bạn ... mã là gì) –

+0

@Ahmedilyas - Tôi đã sửa đổi bài đăng của mình để thêm đánh dấu. –

+0

có thể trùng lặp của [Xác thực bên ứng dụng khách MVC3 không hoạt động] (http://stackoverflow.com/questions/4706174/mvc3-client-side-validation-not-working) –

Trả lời

10

tôi thấy vấn đề của tôi. Trong BundleConfig.cs của tôi, tôi có như sau:

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" 
       )); 

Nhưng, những gì tôi đã không nhận ra là bó jqueryval KHÔNG được nạp trong file _Layout.cshtml theo mặc định. Vì vậy, tôi cần phải thêm nó, như sau:

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

Khi tôi đã làm điều này, nó hoạt động như mong muốn. Tất nhiên, điều này sẽ làm cho nó được tải cho tất cả các trang. Điều đó có thể không được mong muốn. Nếu không, tải nó một cách riêng biệt trong mỗi trang khi cần thiết.

Các vấn đề liên quan