2012-03-14 36 views
16

Tôi đang sử dụng MVC3 với xác thực không phô trương. Tôi có một trường mà người dùng dự kiến ​​sẽ điền vào một số dữ liệu và sau đó nhấn nút "tìm kiếm". Nếu tìm kiếm chưa bao giờ được nhấn hoặc người dùng đã thay đổi trường nhập sau khi nhấn tìm kiếm, biểu mẫu sẽ không thể gửi được.Xác thực một Trường Ẩn

Tôi đã thêm trường ẩn được đặt thành true bởi sự kiện click() của nút và làm trống bởi sự kiện keyup() của hộp nhập. Bây giờ tôi muốn thêm quy tắc xác thực yêu cầu trường ẩn phải là true để cho phép gửi.

Tốt hơn là tôi muốn sử dụng tính năng xác thực không phô trương, nhưng nếu điều đó không có tác dụng thì điều đó là ok với điều gì đó yêu cầu một số javascript, miễn là nó không làm hỏng xác nhận không phô trương cho phần còn lại của biểu mẫu.

Đoạn mã sau thực hiện chính xác những gì tôi muốn, cho đến khi tôi thêm type="hidden".

<input class="required" id="client-searched" data-val="true" 
    name="ClientSearched" data-val-required="Press search!"/> 
<span class="field-validation-valid" data-valmsg-replace="true" 
    data-valmsg-for="ClientSearched"/> 

Trả lời

26

thử

var validator = $("#myFormId").data('validator');  
    validator.settings.ignore = ""; 

Dưới đây là một thông tin blog post

EDIT

@RAM đề nghị một giải pháp tốt hơn xin vui lòng FOLLOW

+2

Có vẻ như mọi thứ đã thay đổi kể từ bài đăng trên blog đó. Trong bài viết họ giải thích làm thế nào để * vô hiệu hóa * xác nhận các lĩnh vực ẩn. Với jquery.validate 1.9.0, mặc định là 'ignore:": hidden "'. –

+0

Nó sẽ tắt bỏ qua ở tất cả, tôi không coi đây là giải pháp đúng – tutok

+0

@tutok một câu trả lời cũ của mình plz câu hỏi để thêm đầu vào có giá trị của bạn ... kính trọng – Rafay

20

Tôi đã có một vấn đề tương tự, và tôi đã sử dụng mã này để thay đổi mặc định, trong MVC 4:

@Scripts.Render("~/bundles/jqueryval") 

<script type="text/javascript"> 
    $.validator.setDefaults({ 
     ignore: "" 
    }) 
</script> 

Nguồn: JQuery validate

2

Trong một số trường hợp, bạn muốn chỉ cần bỏ qua xác nhận trên một hoặc một số các trường ẩn (không phải tất cả lĩnh vực ẩn) trong client side và cũng có thể bạn muốn xác nhận chúng và khác trường ẩn trong server side. Trong những trường hợp này, bạn có thuộc tính xác thực cho tất cả các trường bị ẩn trong ViewModel và chúng sẽ được sử dụng để xác thực biểu mẫu khi bạn đăng (server side).

Bây giờ bạn cần một mẹo để chỉ xác thực một số trường ẩn trong phía máy khách (không phải tất cả chúng). Trong những trường hợp này tôi khuyên bạn nên sử dụng cơ chế của tôi!

Đặt data-force-val làm true trong thẻ mục tiêu bị ẩn. Đó là thuộc tính tùy chỉnh của chúng tôi mà chúng tôi sử dụng để phát hiện mục tiêu ẩn đầu vào phù thủy chúng tôi muốn xác nhận chúng ở phía khách hàng.

// This hidden input will validate both server side & client side 
<input type="hidden" value="" name="Id" id="Id" 
     data-val-required="The Id field is required." 
     data-val="true" 
     data-force-val="true"> 

// This hidden input will validate both server side & client side 
<input type="hidden" value="" name="Email" id="Email" 
     data-val-required="The Email field is required." 
     data-val="true" 
     data-force-val="true"> 

// This hidden input just will validate server side 
<input type="hidden" value="" name="Name" id="Name" 
     data-val-required="The Neme field is required." 
     data-val="true"> 

Ngoài ra bạn có thể đặt data_force-val cho đầu vào ẩn của bạn bằng cách jQuery:

$("#Id").attr("data-force-val", true); // We want validate Id in client side 
$("#Email").attr("data-force-val", true); // We want validate Email in client side 
$("#Name").attr("data-force-val", false); // We wont validate Name in client side (This line is not necessary, event we can remove it) 

Bây giờ, hoạt động data-force-val="true" chức năng của một số mã đơn giản như thế này:

var validator = $("#TheFormId").data('validator');  
validator.settings.ignore = ":hidden:not([data-force-val='true'])"; 

Lưu ý: giá trị validator.settings.ignore mặc định là :hidden

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