2012-08-23 31 views
5

हम जानते हैं कि MVC में, एक CheckBoxFor एक value="true" के साथ एक checkbox और एक value=false के साथ एक hidden उत्पन्न होगा। दोनों इनपुट नियंत्रण एक ही नाम साझा करेंगे।JSON डेटा में एक फार्म में चेकबॉक्स को क्रमानुसार कैसे

यह बहुत उचित है क्योंकि फॉर्म अनचेक होने पर फॉर्म गलत मूल्य पोस्ट करने में सक्षम होगा। और जब चेकबॉक्स एक सत्य लौटाता है तो मॉडल बाइंडर छुपा इनपुट को अनदेखा कर देगा।

लेकिन अब मैंने जेएसओएन प्रारूप में वेब डेटा नियंत्रक में फॉर्म डेटा भेजने के लिए प्रपत्र जमा करने के लिए ओवरराइड किया है।

जब फॉर्म डेटा को क्रमबद्ध करते हैं, तो चेकबॉक्स और छिपे हुए तरीके से संबंधों को पार्स करने के लिए कोई तंत्र नहीं है। इसलिए, जब अनचेक किया जाता है, तो यह false देता है, जो ठीक है। लेकिन जब चेक किया जाता है, तो यह true के बजाय {true, false} देता है, क्योंकि serializeArray() फ़ंक्शन प्रत्येक input के माध्यम से जाता है और दो मान एक ही नाम पर जाते हैं।

सवाल यह है: इसे सही करने का सबसे अच्छा तरीका क्या है?

+0

संभावित डुप्लिकेट [एएसपी.नेट एमवीसी 4 की वेबएपीआई चेक बॉक्स को सही ढंग से बाध्य नहीं करता है?] (Http://stackoverflow.com/questions/11996285/asp-net-mvc-4s-webapi-does-not-bind- चेक-बक्से-सही ढंग से) –

उत्तर

1

इस समस्या का मेरा समाधान अपनी खुद की HtmlHelper विधि लिखना था जो एक < इनपुट प्रकार = "चेकबॉक्स"/> टैग प्रस्तुत करता है। कोई अन्य समाधान बस बहुत हैकी लग रहा था।

आप डॉटपीक या .NET परावर्तक का उपयोग यह देखने के लिए कर सकते हैं कि Microsoft टीम ने HtmlHelper.CheckboxFor विधि कैसे बनाई है, यदि आपको उस कार्य को पूरा करने में कोई मदद चाहिए।

एमवीसी एक्शन पैरामीटर को अपवाद फेंकने से रोकने के लिए 2 टैग दृष्टिकोण लिया गया था जब "बूल" पैरामीटर में नियंत्रक को भेजा गया मिलान पैरामीटर नहीं था (एक अनचेक चेकबॉक्स कोई मान नहीं भेजता)।