2011-10-06 9 views
6

मेरे पास एप्लिकेशन में सामान्य हां नहीं है। इसके लिए, मैंने भावी विस्तार प्रूपोज के लिए मॉडल (बल्कि व्यूमोडेल उपयोगिता) कक्षा विकसित की है।DropDownListFor (...) डिफ़ॉल्ट रूप से बूलियन झूठी का चयन

public string Text { get; set; } // represents text part 
     public bool Value { get; set; } // represent value 
     public List<DropDown> DropDowns { get; set; } //list for binding 
     public void BuildYesNoDropDown() 
     { 
      DropDowns = new List<DropDown>(); 
      DropDowns.Add(new DropDown { Text = "Yes", Value = true }); 
      DropDowns.Add(new DropDown { Text = "No", Value = false }); 
     } 

फिर, मैं निम्नलिखित की तरह ध्यान में रखते हुए यह बाँध:

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"Select") //last para - OptionLabel 

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

डेटावैल्यूफ़िल्ड बूल होने पर सामान्य व्यवहार कैसे प्राप्त करें?

उत्तर

7

मॉडल:

public bool? Value { get; set; } 

दृश्य: अशक्त, सच है, झूठी:

@Html.EditorFor(model => model.Value) 

यह 3 कहा गया है कि एक नल bool के 3 राज्यों से मेल के साथ स्वचालित रूप से एक ड्रॉप डाउन सूची में आता है। आप की आवश्यकता होती है कि मूल्य जवाब दिया, तो तुम इतनी तरह डेटा व्याख्या का उपयोग कर सकते हैं:

मॉडल:

[Required] 
public bool? Value { get; set; } 

टेकअवे अपने मॉडल एक असली मॉडल की जरूरत है है - यह सेट नहीं से इनपुट मानों मॉडल करने के लिए की जरूरत है स्थापित करना। यदि आपको int इनपुट करने की आवश्यकता है, तो आप शायद एक शून्य int (इसलिए int?) का उपयोग करना चाहेंगे और मान की आवश्यकता होगी। इस तरह प्रारंभिक मान 0 की बजाय शून्य है। यह string को छोड़कर अन्य डेटा प्रकारों के समान है जो पहले से ही शून्य है।

+0

उत्तर के लिए धन्यवाद तय की। लेकिन, मुझे लगता है कि मेरा सवाल गलत समझा गया था। वर्तमान में, डिफ़ॉल्ट रूप से बूल मान के साथ "नहीं" चुना गया है। इसके बजाय, मैं "चयन" चाहता हूं जिसे OptionLabel चुना जाना चाहिए। – StartingFromScratch

+0

मैं किसी और को इसका जवाब दूंगा - आपको उनके लिए 'ड्रॉपडाउन' मॉडल प्रदान करने की आवश्यकता है। – Cymen

+0

कोड को वापस पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है ... :(मुझे लगता है कि समस्या लैम्ब्डा अभिव्यक्ति प्रकार के साथ है। उपरोक्त कोड में, x => x.SelectedValue का प्रकार बूल है। वह इंजन को अंतिम "झूठी चुनने के लिए मजबूर करता है "प्रदान किए गए संग्रह में मूल्य। मुझे यकीन नहीं है! – StartingFromScratch

1

मुझे पता है कि यह एक पुराना विषय है, लेकिन मैंने सोचा कि दूसरों के लिए यह थोड़ा पृष्ठभूमि जानने के लिए आसान हो सकता है।

कोई डिफ़ॉल्ट रूप से चयनित है, क्योंकि एक bool का डिफ़ॉल्ट मान झूठी

है अगर तुम सिर्फ मॉडल सेट आपके विचार मॉडल में इस तरह की एक अशक्त करने योग्य बूल होने के लिए तो यह चाहिए डिफ़ॉल्ट रूप से आपके डिफ़ॉल्ट चयन मूल्य। :

public bool? Value { get; set; } 

और फिर तुम सिर्फ ध्यान में रखते हुए इस तरह से अपनी dropdownlist सेट:

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"{Default Select Value}") 

इस का परिणाम होना चाहिए कि जब bool है अशक्त स्वचालित रूप से चुना गया विकल्प आपके डिफ़ॉल्ट मान होना चाहिए {Default Select Value}

3

मेरे मामले में मेरे पास एक ही पृष्ठ पर इन ड्रॉपडाउन का एक गुच्छा था और मैंने सोचा कि मैं चालाक होगा और चयन सूची का पुन: उपयोग करूंगा, उदाहरण के लिए

var YesOrNoTriState = new List<SelectListItem> { 
    new SelectListItem { Text = "Select", Value = "" }, 
    new SelectListItem { Text = "Yes", Value = true.ToString() }, 
    new SelectListItem { Text = "No", Value = false.ToString() } 
}; 

और देखने

<%: Html.DropDownListFor(x => x.Field1, Model.YesOrNoTriState) %> 
<%: Html.DropDownListFor(x => x.Field2, Model.YesOrNoTriState) %> 

कि काम नहीं कर रहा था।मैं हर लटकती के लिए एक अलग चयन सूची प्रारंभ और है कि समस्या

9

ViewModel

public bool flag { get; set; } 

देखें

@Html.DropDownListFor(model => model.flag, new List<SelectListItem>() 
{ 
    new SelectListItem() { Text = "Yes", Value = "True" }, 
    new SelectListItem() { Text = "No", Value = "False"} 
}, "Select.....", new { @id = "flag", @class="form-control" }) 
@Html.ValidationMessageFor(model => model.flag) 
+0

यदि आपके पास मॉडल पर '[आवश्यक]' डेटा एनोटेशन है तो यह काम नहीं करता है। –

+1

सही, जावास्क्रिप्ट सत्यापन का उपयोग करने की आवश्यकता होगी। – JoshYates1980

+1

मेरे लिए एक आकर्षण की तरह काम किया! मैंने अभी तीसरा पैरामीटर "चुनें ....." छोड़ा क्योंकि मैं एक आवश्यक फ़ील्ड से निपट रहा था, इसलिए यह हमेशा पॉप्युलेट हो जाएगा। – Reddy

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