2011-09-29 19 views
12

यदि चेकबॉक्स चेक नहीं किया गया है, तो फॉर्म सबमिट बटन पर क्लिक करने से कोई भी डेटा सबमिट नहीं होता है।अनचेक चेकबॉक्स भी सबमिट करें

कुछ चेकबॉक्स उपयोगकर्ता द्वारा चुने गए फॉर्म फ़ील्ड के आधार पर फॉर्म में मौजूद नहीं हो सकते हैं। तो सबमिट करें नियंत्रक को यह निर्धारित करने की कोई संभावना नहीं है कि अनचेक चेकबॉक्स फॉर्म में मौजूद था या नहीं।

यदि डेटाबेस इस कॉलम के लिए सत्य है, तो यह गुण गलत पर अपडेट नहीं किया गया है। चेकबॉक्स नाम डेटाबेस बूलियन कॉलम नाम के समान है।

अनचेक स्थिति में चेकबॉक्स को सबमिट करने के लिए फॉर्म को कैसे बल देना है या पर किसी भी अन्य विचार को गलत तरीके से डेटाबेस में सेट मान अगर चेकबॉक्स चेक नहीं किया गया है, लेकिन चेकबॉक्स मौजूद नहीं है तो डेटाबेस में मान बदलने के लिए नहीं?

jQuery, jQueryUI, asp.net 2 MVC

उत्तर

10

उपयोग किया जाता है इस HTML फ़ॉर्म में चेक बॉक्स के साथ एक आम मुद्दा है और ASP.NET लिए अद्वितीय नहीं है।

उत्तर प्रत्येक छिपे हुए क्षेत्र के साथ एक छुपा क्षेत्र होना है। जब चेकबॉक्स संशोधित होता है, तो छिपे हुए फ़ील्ड को अपडेट करने के लिए क्लाइंट-साइड इवेंट का उपयोग करें।

छुपा क्षेत्र हमेशा सबमिट किया जाएगा।

हालांकि, चूंकि आप एएसपी.नेट एमवीसी का उपयोग कर रहे हैं, यदि आप HTML.CheckBoxFor सहायक का उपयोग करते हैं, तो यह आपके लिए स्वचालित रूप से इसे संभालेगा।

+0

@Thank आप, इस मुद्दे को हल करती है। मैं 'की तरह शून्य RenderFormField (StringBuilder sb) { स्विच (col.ColumnType) { मामले ColumnType.Boolean asp.net MVC2 में गतिशील रूप पैदा कर रहा हूँ: sb.AppendFormat (" ", col.PropertyName); sb.AppendFormat (" Andrus

+0

@Andrus, मैं तुम्हें HTML.CheckBoxFor' ऊपर उल्लिखित का उपयोग कर 'एक नियमित रूप से दृश्य बनाते हैं और जिसके परिणामस्वरूप HTML की प्रतिलिपि सुझाव है (और आप किसी भी जावास्क्रिप्ट शामिल किए जाने को पकड़ने सुनिश्चित)। हालांकि, एक सामान्य नियम के रूप में, मैं इस तरह से एक फॉर्म उत्पन्न करने से बचने की कोशिश करता हूं। यदि आप अन्य विकल्पों की जांच करना चाहते हैं तो आप जो हासिल करने की कोशिश कर रहे हैं, उसके बारे में एक अन्य प्रश्न खोलने के लायक हो सकता है। सौभाग्य! –

+0

क्लाइंट-साइड इवेंट की आवश्यकता क्यों है? http://stackoverflow.com/questions/5102544/set-unchecked-value-of-checkbox जवाब लिखा कि ज्यादा कुछ नहीं की आवश्यकता है, एक ही नाम के साथ छिपा तत्व पर्याप्त है यह हमेशा overrridden जाएगा के बाद से? – Andrus

6

यह एक बहुत ही आम समस्या है - जब चेकबॉक्स चयनित नहीं होता है तो यह सर्वर मूल्य को बंद/गलत नहीं भेजता है। मुझे मिला सबसे लोकप्रिय उत्तर था चेकबॉक्स और मूल्य = झूठी के समान नाम के साथ छिपे हुए फ़ील्ड को जोड़ना था। लेकिन फिर जब किसी ने इसे चेक किया तो उसने मुझे दो मूल्य भेजे।

और मुझे यह पसंद नहीं आया। यह मैं क्या किया है:

HTML में

कहीं:

<input type="checkbox" name="${name}" onclick="true" > 

JQuery में:

सबसे पहले कदम सभी चेक बॉक्स कि जाँच नहीं कर रहे हैं पर छिपा मूल्यों को निर्धारित करने के लिए है।

$(document).ready(function() { 
     $(".checkbox").each(function() { 
       if ($(this).prop("checked") == undefined) { 
        $(this).after("<input type=\"hidden\" name=\"" + $(this).attr("name") + "\" value="off">") 
       } 
       } 
     ) 
    }); 

दूसरी बात हम उपयोगकर्ता चेक-बॉक्स क्लिक करने पर प्रतिक्रिया करने के लिए है: जबकि अचयनित छिपी हुई फ़ील्ड जोड़ने के लिए, का चयन करते - डोम में अगले भाई को दूर - हम छिपी हुई फ़ील्ड वहाँ की उम्मीद।

चेतावनी: चेक-बॉक्स का आम माता-पिता जब अगर अगले भाई प्रकार छिपा हुआ है आप की जाँच करनी चाहिए और फिर इसे !:

$(".checkbox").click(function() { 
        if ($(this).prop("checked") == undefined) { 
         $(this).after("<input type=\"hidden\" name=\"" + $(this).attr("name") + "\" value=off>") 
        } else { 
         $(this).next().remove(); 
        } 
       } 
      ); 

हटाने और यह मेरे लिए काम करता :)

+0

मैं तुम्हें upvoted क्योंकि यह एक सुरुचिपूर्ण समाधान है एक मूल्य के साथ सर्वर पर पोस्ट कर रहे हैं है। शायद यह .NET के लिए सबसे अच्छा नहीं है लेकिन मैं .NET का उपयोग नहीं कर रहा हूं। हालांकि, कुछ नोट्स: आपके एचटीएमएल में 'ऑनक्लिक' की कोई ज़रूरत नहीं है और इसके अलावा यह खराब फॉर्म है। इसके अलावा, दुर्भाग्य से आपका कोड काफी काम नहीं करता है, कम से कम नवीनतम jQuery (attr ("चेक") के साथ अब काम नहीं करता है)। मैं आपके सुझाए गए सुधारों के साथ अपना उत्तर संपादित करूंगा (जो मेरे लिए काम करता है)। आपके उत्तर के लिए धन्यवाद, यह बहुत उपयोगी था। – Lambart

+0

मैंने कभी भी एक संपादन को अस्वीकार नहीं किया है, लेकिन 3 बार मैंने आपके उत्तर को सही करने की कोशिश की है (attr -> prop) लेकिन इसे हर बार अस्वीकार कर दिया गया है। स्टैक ओवरफ़्लो में आपका स्वागत है। मुझे यकीन है कि वे आपको अपना जवाब सही करने की अनुमति देंगे; कृपया कीजिए। – Lambart

+1

जानकारी के लिए धन्यवाद :) मैंने अपना जवाब संपादित किया। मैं इस समाधान का भी उपयोग नहीं कर रहा हूं।नेट, लेकिन मुझे लगता है कि यह समस्या अधिक वैश्विक है। – Diaes

3

मेरे सबसे छोटा समाधान: 0 या 1. के रूप में एक छिपे हुए भाई स्थापित करने के लिए एक चेकबॉक्स के onchange() घटना का उपयोग इस प्रकार है:

var htm = '<input type="checkbox" '+(isMale>0?"checked":"")+' onchange="this.nextSibling.value=this.checked==true?1:0;" /><input type="hidden" name="Gender" value="'+isMale+'" />'; 

जमा करें केवल hidd भेजता है एन भाई, चेकबॉक्स नहीं क्योंकि इसमें कोई नाम विशेषता नहीं है। तो उपरोक्त धारावाहिक है "...& लिंग = 1 ... "या" ... & 0 लिंग = ... "isMale मूल्य के आधार पर

0

jQuery/जावा का उपयोग करते समय मैं ने वही समस्या में भाग -। के बजाय एक अतिरिक्त छिपी हुई फ़ील्ड का उपयोग कर, मैं एक प्रस्तुत करने के लिए हर बार प्रपत्र कि क्या क्षेत्रों संशोधित किया गया पर ध्यान दिए बिना बचा लिया गया था मजबूर

जैसे हैं chkBox1 =unchecked (शून्य भेज देंगे - jQuery onClick या onChange चेकबॉक्स की घटना के माध्यम से नियंत्रण मूल्य विशेषता)।

<input name="chkBox1 " class="editable-value" id="chkBox1 " style="display: inline;" type="checkbox" data-type="A" data-original-value="checked" data-force-save="true" value="N"/> 

और ChkBox2=checked (वाई भेज देगा)

<input name="ChkBox2" class="editable-value" id="ChkBox2" type="checkbox" CHECKED="Y" data-type="A" data-original-value="checked" value="Y"> 

स्क्रीन मूल्यों पर हैं और मैं अपने जावा कोड में डेटा को सहेजने का प्रयास करता हूं, मैं गेटटर में प्राप्त मूल्य पर एक शून्य जांच करता हूं और एक 'एन' के रूप में शून्य की व्याख्या करता हूं। यह एक छिपे हुए क्षेत्र के ऊपरी हिस्से से बचाता है हालांकि कोई भी उस समाधान को चुनने के लिए स्वतंत्र है जो उनकी विशेष स्थिति को संबोधित करता है।

0

मैं हाल ही में इस मुद्दे में अपने आप को मिल गया है, और यह मेरा समाधान है। मैं इसे छिपे हुए क्षेत्र के बिना करता हूं। बस चेकबॉक्स के 'मान' को 'ऑफ' में बदलें, और सुनिश्चित करें कि यह चेक किया गया है, इसलिए इसे भेजा जाता है। नोट: मैंने केवल एक PHP सर्वर के खिलाफ परीक्षण किया है, लेकिन यह काम करना चाहिए।

 // Prepare checkboxes 
    var checkboxes = document.querySelectorAll('input[type="checkbox"]') 
    checkboxes.forEach(function(cbox) { 
     if (!cbox.checked) { // If the checkbox is checked it keeps its value, default value is 'on' 
      cbox.value='off' // Otherwise change the value to off, or something else 
      cbox.checked = true // We need to check it, so it sends the value 
     } 
    }) 
संबंधित मुद्दे