14

Tôi đang cố hiểu điều gì đó.

Từ bài đăng trên blog này http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

Bridging HTML và jQuery Validate: Adapters

Viết một validator client-side liên quan đến hai bước sau: văn bản cho validator cho jQuery Validate, và viết adapter mà mất các giá trị tham số từ các thuộc tính HTML và biến nó thành jQuery Xác thực siêu dữ liệu. Chủ đề cũ không nằm trong phạm vi của blog này bài đăng (vì nó thực sự không phải là MVC cụ thể).

Có bộ sưu tập bộ điều hợp có sẵn tại jQuery.validator.unobtrusive.adapters. Treo bộ chuyển đổi bộ sưu tập là phương pháp đăng ký bộ chuyển đổi (thêm) và ba người trợ giúp có thể được sử dụng để đăng ký các loại bộ điều hợp rất phổ biến (addBool, addSingleVal và addMinMax).

Lưu ý rằng nó cho biết hai bước.

Nhưng nếu bạn có một cái nhìn vào bài đăng này MVC3: make checkbox required via jQuery validate? bạn chỉ cần bước thứ hai ("viết adapter") về việc phê chuẩn để làm việc - bằng cách thêm dòng mã này:

$.validator.unobtrusive.adapters.addBool("mandatory", "required"); 

Tôi đã thử nghiệm ra mã trong một MVC 4 Internet App mới và nó hoạt động tốt, đây là mẫu siêu mẫu.

Xem Mẫu

public class SimpleViewModel 
{ 
    [Mandatory(ErrorMessage = "You must agree to the Terms to register.")] 
    [Display(Name = "Terms Accepted")] 
    public bool IsTermsAccepted { get; set; } 
} 

Validation Attribute

public class MandatoryAttribute : ValidationAttribute, IClientValidatable 
{ 
    public override bool IsValid(object value) 
    { 
     return (!(value is bool) || (bool)value); 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     ModelClientValidationRule rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationType = "mandatory"; 
     yield return rule; 
    } 
} 

Xem

@model MvcApplication2.Models.SimpleViewModel 

@{ 
    ViewBag.Title = ""; 
}  

@using (Html.BeginForm()) { 
    @Html.ValidationSummary() 
    @Html.CheckBoxFor(model => model.IsTermsAccepted) 
    @Html.ValidationMessageFor(model => model.IsTermsAccepted) 
    <input type="submit" value="Send" /> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    <script type="text/javascript"> 
     $.validator.unobtrusive.adapters.addBool("mandatory", "required"); 
    </script> 
} 

Vì vậy, về cơ bản tôi đã có ba câu hỏi:

  1. là $ .validator.unobtrusive.adapters.addBool ("bắt buộc", "bắt buộc"); thực sự điều duy nhất bạn cần ngoài việc viết một lớp thuộc tính?

  2. chính xác nó sẽ làm gì sau hậu trường?

  3. nơi tôi có thể tìm thấy tài liệu tốt về addBool?

+1

1: Chỉ dành cho bộ điều hợp "đã tồn tại". 2: Không chắc chắn, hy vọng tìm ra bản thân mình. 3: Nếu bạn tìm thấy một, xin vui lòng cho tôi biết! – BlueChippy

+1

http://thewayofcode.wordpress.com/2012/01/18/custom-unobtrusive-jquery-validation-with-data-annotations-in-mvc-3/ – BlueChippy

Trả lời

3

Bên cạnh bài viết @BlueChippy được liên kết trong các nhận xét, tôi đã tìm thấy câu trả lời cho 2. trong số this article.

  1. có đó là điều duy nhất cần thiết bên cạnh thuộc tính. Đó là vì chúng tôi sử dụng quy tắc đã tồn tại (yêu cầu).
  2. Nó sẽ làm gì?

chỉ này đăng ký một adapter xác nhận mới cho tính bắt buộc, nơi tham số đầu tiên là tên adapter và tham số thứ hai là tên của jQuery xác nhận quy tắc. Tên bộ điều hợp phải khớp với giá trị mà chúng tôi đã chỉ định trước đó làm loại xác thực, và quy tắc yêu cầu xác thực jQuery sẽ yêu cầu người dùng kiểm tra hộp kiểm.

3. Bạn có thể tìm thêm thông tin tại this article on Brad Wilson's blog.

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