2011-12-13 23 views
7

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

फ़ील्ड नाम RFP.DatesFlexible है और इसलिए मैं मेरे विचार में निम्न मार्कअप लिखा है:

<input type="checkbox" id="RFP_DatesFlexible" name="RFP.DatesFlexible" /> 
<label for="RFP_DatesFlexible">My Dates are Flexible</label> 

लेकिन यह काम नहीं करता। नतीजा हमेशा शून्य होता है और ModelState.IsValid गलत है।

क्या कोई यह कह सकता है कि मैं यह काम कैसे कर सकता हूं?

संपादित

इस कोड के साथ मैं समाप्त हो गया है, ठीक काम करने के लिए प्रकट होता है जो है।

@Html.CheckBox("RFP.DatesFlexible", Model.RFP.DatesFlexible ?? false) 
@Html.Label("RFP.DatesFlexible", "My Dates are Flexible") 

लेबल चेकबॉक्स से सही ढंग से जुड़ा हुआ है ताकि टेक्स्ट पर क्लिक करके चेकबॉक्स टॉगल हो जाए।

+0

उत्तर के लिए धन्यवाद! – resnyanskiy

उत्तर

5

ऐसा कुछ?

मॉडल:

public class MyViewModel 
{ 
    public ViewModel2 RDP { get; set; } 
} 

public class ViewModel2 
{ 
    public bool? DatesFlexible { get; set; } 
} 

नियंत्रक:

public ActionResult TestBool() 
    { 
     return View(new MyViewModel { RDP = new ViewModel2() }); 
    } 

    [HttpPost] 
    public ActionResult TestBool(MyViewModel vm) 
    { 
     return View(); 
    } 

दृश्य:

@model mvc_testing_2.Models.MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.CheckBox("RDP.DatesFlexible", 
     Model.RDP.DatesFlexible != null && (bool)Model.RDP.DatesFlexible) 

    <input type="submit" value="go" /> 
} 
+0

यह काम नहीं करेगा। पहला तर्क एक त्रुटि है क्योंकि यह बूल को परिवर्तित नहीं कर सकता है? बूल करने के लिए। और अगर मैं इसे एक बूल टाइप करता हूं, तो मुझे एक त्रुटि मिलती है क्योंकि यह कोई संपत्ति नहीं है। –

+0

ठीक है, फिर इसे इस पर बदलें: '@ एचटीएमएल। चेकबॉक्स ("तिथियां फ्लेक्सिबल", मॉडल .डेट्सफ्लेक्सिबल! = नल एंड& (बूल) मॉडल .डेट्स लचीला) '। यह काम करता है, मैंने अभी इसका परीक्षण किया। (क्या आरएफपी किसी अन्य मॉडल की संपत्ति है? मॉडल.आरएफपी.डेट्स फ्लेक्सिबल? यदि ऐसा है, तो आपको संभवतः इनपुट को नाम देने की आवश्यकता होगी कि आपके पास आपके प्रश्न में यह कैसे है, मुझे ऑफ-हाथ याद नहीं है) – hawkke

+0

यह संकलित करता है - धन्यवाद । हालांकि, पेज सबमिट होने पर फ़ील्ड अभी भी 'शून्य' है। किसी भी तरह, यह नहीं उठा रहा है कि नियंत्रण क्षेत्र से जुड़ा हुआ है। (फ़ील्ड मॉडल है। आरएफपी.डेट्स फ्लेक्सिबल।) –

1

सबसे पहले, मुझे लगता है कि यह कैसे काम करता है समझने के लिए Html.CheckBox में मदद मिलेगी। यह काफी नहीं है कि आप क्या उम्मीद करेंगे। HTML.CheckBox Behaviour

पर एक नजर डालें आपके प्रश्न का उत्तर करने के लिए, कारण अपने कोड काम नहीं करता है, क्योंकि आपके <input /> सही ढंग से बाध्य करने के लिए एक value='true' की आवश्यकता है। उदाहरण के लिए:

<input type='checkbox' name='RFP.DatesFlexible' value='true' /> 

और एक checked='checked' संपत्ति जोड़ने अगर यह जाँच की जानी चाहिए।

है यही कारण है कि मैं आमतौर पर अपने खुद के साथ Html.CheckBox विधि ओवरराइड। डिफ़ॉल्ट कार्यान्वयन सिर्फ उलझन में है।

+0

हां, यह भ्रमित है। मैंने अपना प्रश्न संपादित किया है जिसका उपयोग मैंने समाप्त होने वाले वास्तविक कोड को दिखाने के लिए किया है। मैं अभी भी '@ एचटीएमएल' वाक्यविन्यास का उपयोग करने में सक्षम था, क्योंकि यह कुछ लाभ प्रदान करता है। और, निश्चित रूप से पर्याप्त है, अगर मैं मार्कअप की जांच करता हूं, तो इसमें विशेषता 'value =' true 'है। –

+0

@ जोनाथनवुड ऊपर आपका वास्तविक कोड सही दिखता है, यह वही है जो मैंने किया होगा। –

0

मैं जानता हूँ कि यह रूप में स्वीकार किया लेकिन मैं इसी तरह की समस्या थी रूप में चिह्नित है, लेकिन मैं उप से अधिक आइटम पुनरावृत्ति गया था तो मैं नाम पैरामीटर bool साथ समस्या थी?isOpen

जब मैं यह है पोस्ट पर ViewModel करने के लिए बाध्य किया जाता था परन्तु बाद लटकती गाया:

@Html.EditorFor(model => model.Days[i].isOpen) 

यह चेक बॉक्स लेकिन मूल्यों प्रदान की गई है, जहां पोस्ट में अशक्त:

@Html.EditorFor("isOpen", model.Days[i].isOpen ?? false) 

करके देख प्रस्तुत एचटीएमएल पर मैंने इसे देखा जिसमें इसे हल किया गया:

@Html.CheckBox("Days[" + i +"].isOpen", Model.Days[i].isOpen ?? false) 

मुझे पता है कि यह है पता है कि यह थोड़ा तेज़ एन गंदा है लेकिन यह

आशा करता है कि यह किसी और को कहीं मदद करता है।

संबंधित मुद्दे