2012-02-15 26 views
5

Tôi có nhiều mục nhập được phân tách thành các vùng chứa khác nhau (bảng). Vấn đề tôi gặp phải là nếu một trong các bảng này bị ẩn (style="display:none;"), thì plugin jQuery.validate, không xác thực các đầu vào đó.jQuery.validate không hợp lệ nếu vùng chứa bị ẩn

tôi thực hiện một thử nghiệm với một ví dụ nhỏ và xảy ra cùng một vấn đề:

xem:

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Fields</legend> 

     <div class="UserName" style="display:none;"> 
      <div class="editor-label"> @Html.LabelFor(model => model.UserName) </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName) 
      </div> 
     </div> 

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

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

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

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

} 

mẫu:

public class UserModel { 

    [Required] 
    [StringLength(6, MinimumLength = 3)] 
    [Display(Name = "User Name")] 
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] 
    [ScaffoldColumn(false)] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(8, MinimumLength = 3)] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
    [Required] 
    [StringLength(9, MinimumLength = 2)] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 
    [Required()] 
    public string City { get; set; } 

} 

Các "UserName" bất động sản không được xác nhận trên khách hàng khi nằm trong div với phong cách "display:none;"

Cảm ơn bạn

+0

Bạn sẽ làm gì nếu xác thực đó thất bại? Người dùng sẽ sửa nó như thế nào nếu nó bị ẩn? Nó có ý nghĩa đối với jQuery để xác thực chỉ các trường được hiển thị trên trang và người dùng có thể sửa trong trường hợp họ không thực hiện quy tắc. – ShankarSangoli

+0

@ShankarSangoli Khi tôi giải thích trong yêu cầu, là các trường được ẩn trong bảng để ngăn chế độ xem từ rất dài, nếu không xác thực, hãy hiển thị các bảng có lỗi. Đây chỉ là một ví dụ đơn giản với cùng một vấn đề. –

Trả lời

17

của hành vi mong muốn không để xác nhận các lĩnh vực đầu vào ẩn, với jquery validate cắm bạn có thể xác nhận đầu vào các trường ẩn bằng cách thiết lập các tùy chọn bỏ qua như

$('#fromID').validate({ 
      ignore: "",    
     }); 

nhưng kể từ khi bạn đang sử dụng xác nhận không phô trương trong MVC3 sử dụng validate jQuery plugin bạn không thể khởi tạo các plugin mình bạn sẽ phải thay đổi cài đặt của nó sau khi nó được khởi tạo như

var validatorSettings = $.data($('form')[0], 'validator').settings; 
validatorSettings.ignore = ""; 

Reference

This is also a helpful blogpost

+1

Điều này rất hữu ích cho tôi với các vấn đề xác nhận khác. Cảm ơn bạn. (Không liên quan đến câu hỏi gốc) – Ciel

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