2012-03-14 9 views
16

मैं अविभाज्य सत्यापन के साथ एमवीसी 3 का उपयोग कर रहा हूं। मेरे पास एक फ़ील्ड है जिसे उपयोगकर्ता को कुछ डेटा भरने की उम्मीद है और फिर "खोज" बटन दबाएं। यदि खोज को दबाया नहीं गया है या उपयोगकर्ता ने खोज दबाए जाने के बाद इनपुट फ़ील्ड बदल दिया है, तो फॉर्म सबमिट करना संभव नहीं होना चाहिए।एक छिपे हुए फ़ील्ड को सत्यापित करें

मैंने एक छिपे हुए फ़ील्ड को जोड़ा है जो true पर click() बटन के ईवेंट द्वारा सेट किया गया है और इनपुट बॉक्स के keyup() ईवेंट द्वारा खाली किया गया है। अब मैं एक सत्यापन नियम जोड़ना चाहता हूं जिसके लिए छुपा फ़ील्ड true सबमिट करने की अनुमति देने के लिए आवश्यक है।

अधिमानतः मैं अविभाज्य सत्यापन का उपयोग करना चाहता हूं, लेकिन यदि यह काम नहीं करता है तो यह कुछ ऐसा है जो कुछ जावास्क्रिप्ट की आवश्यकता है, जब तक कि यह शेष रूप के लिए अविभाज्य सत्यापन को खराब न करे।

निम्न कोड स्निपेट वही करता है जो मैं चाहता हूं, जब तक कि मैं 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"/> 

उत्तर

26

कोशिश

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

यहाँ एक जानकारीपूर्ण blog post

संपादित

@RAM एक बेहतर समाधान कृपया FOLLOW

+2

ऐसा लगता है जैसे कि ब्लॉग पोस्ट के बाद चीजें बदल गई हैं। पोस्ट में वे बताते हैं कि छुपा क्षेत्रों के * अक्षम * सत्यापन कैसे करें। Jquery.validate 1.9.0 डिफ़ॉल्ट के साथ 'अनदेखा करें: ": छुपा हुआ" '। –

+0

यह बिल्कुल अनदेखा कर देगा, मैं इसे सही समाधान के रूप में नहीं मानता – tutok

+0

@tutok इसका एक साल पुराना उत्तर कृपया अपने मूल्यवान इनपुट को जोड़ने के लिए प्रश्न संपादित करें ... – Rafay

20

मैं एक ऐसी ही समस्या थी सुझाव दिया है, और मैं प्रयोग किया जाता है एमवीसी 4 में डिफ़ॉल्ट रूप से बदलने के लिए यह कोड:

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

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

स्रोत: JQuery validate

2

कुछ मामलों आप सिर्फ एक या कई छिपा (सभी नहीं छिपा क्षेत्र) क्षेत्रों पर सत्यापन की अनदेखी client side में चाहते हैं और यह भी आप उन्हें और अन्य को मान्य चाहते हैं server side में छिपे हुए फ़ील्ड। इन मामलों में आपके पास ViewModel में सभी छिपे हुए फ़ील्ड के लिए सत्यापन विशेषताएं हैं और जब आप इसे पोस्ट करते हैं तो फॉर्म को सत्यापित करने के लिए उनका उपयोग किया जाएगा (server side)।

अब आपको केवल क्लाइंट पक्ष में छिपे हुए फ़ील्ड को सत्यापित करने के लिए एक चाल की आवश्यकता है (उन सभी में से नहीं)। इन मामलों में मैं आपको अपने तंत्र का उपयोग करने की सलाह देता हूं!

लक्ष्य छिपा इनपुट टैग में true के रूप में सेट करें। यह हमारी कस्टम विशेषता है जिसका उपयोग हम लक्षित छुपा इनपुट चुड़ैल का पता लगाने के लिए करते हैं, जिसे हम ग्राहक पक्ष में मान्य करना चाहते हैं।

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

नोट:: validator.settings.ignore डिफ़ॉल्ट मान इस तरह के कुछ सरल कोड द्वारा

$("#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) 

अब, सक्रिय data-force-val="true" कार्यक्षमता:

// 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"> 

इसके अलावा, आप jQuery द्वारा अपने छिपे आदानों के लिए data_force-val सेट कर सकते हैं :hidden