2017-01-18 17 views
8

में "चयनित वैल्यू" कैसे सेट करें जैसा कि सवाल कहता है: DropDownListFor एचटीएमएल सहायक में चयनित वैल्यू कैसे सेट करें?एमवीसी 5 - DropDownListFor एचटीएमएल सहायक

अन्य समाधानों का प्रयास किया लेकिन कोई भी काम नहीं किया इसलिए मैं एक नया प्रश्न खोल रहा हूं। इन मदद की

कुछ भी नहीं:

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2), htmlAttributes: new { @class = "form-control" }) 

//Not working with or without cast 
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Single(x => x.Id == 2)), htmlAttributes: new { @class = "form-control" }) 
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Where(x => x.Id == 2).FirstOrDefault()), htmlAttributes: new { @class = "form-control" }) 

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", new SelectListItem() { Value="2", Selected=true}), htmlAttributes: new { @class = "form-control" }) 

मैं सिर्फ सूची यदि संभव हो तो के लिए SelectListItems के मैनुअल निर्माण या एक ViewModel से बचने के लिए चाहते हैं।

+0

'DropDownListFor()' संपत्ति के मूल्य के आधार पर चयनित विकल्प सेट 'TipPopustaId' (कि bhow मॉडल बंधन काम करता है)। मॉडल को देखने के लिए पास करने से पहले नियंत्रक में अपना मान सेट करें और सही विकल्प चुना जाएगा ('चयनित' प्रॉपर्टी को मॉडल प्रॉपर्टी पर बाध्य करते समय अनदेखा किया जाता है) –

+0

मैं नया हूं और अभी भी बेवकूफ चीजों की कोशिश कर रहा हूं। मुझे याद दिलाने के लिए बहुत बहुत धन्यवाद। – Dino

+0

ठीक है, मैं इसे देखकर उत्तर के रूप में देखूंगा। – Dino

उत्तर

9

जब आप मॉडल संपत्ति से जुड़ने के लिए DropDownListFor() (या DropDownList()) विधि का उपयोग करते हैं, तो यह उस विकल्प का मूल्य है जो चयनित विकल्प सेट करता है।

आंतरिक रूप से, अपने स्वयं के तरीकों IEnumerable<SelectListItem> पैदा करते हैं और Selected संपत्ति संपत्ति के मूल्य के आधार पर निर्धारित करते हैं, और इसलिए की स्थापना अपने कोड में Selected संपत्ति नजरअंदाज कर दिया है। केवल समय अपने सम्मान के लिए जब आप का उपयोग कर

@Html.DropDownList("NotAModelProperty", new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2)) 

नोट अपने source code, विशेष रूप से SelectInternal() और GetSelectListWithDefaultValue() पद्धतियां देखने के लिए कि यह कैसे काम करता है विस्तार से निरीक्षण कर सकते हैं, एक मॉडल संपत्ति के लिए बाध्य नहीं है, उदाहरण के लिए है।

चयनित विकल्प प्रदर्शित करने के लिए जब दृश्य पहले प्रदान की गई है, GET पद्धति में संपत्ति के मूल्य सेट इससे पहले कि आप को देखने के लिए मॉडल पारित

मैं यह भी अनुशंसा आपके विचार मॉडल एक संपत्ति IEnumerable<SelectListItem> TipoviDepozita होता है और है कि आप नियंत्रक में SelectList उत्पन्न

var model = new YourModel() 
{ 
    TipoviDepozita = new SelectList(yourCollection, "Id", "Naziv"), 
    TipPopustaId = 2 // set the selected option 
} 
return View(model); 

तो दृश्य

@Html.DropDownListFor(m => m.TipPopustaId, Model.TipoviDepozita, new { @class = "form-control" }) 
+0

यह मुझे सोच रहा है ... क्या मैं डेटा-एट्रिब्यूट्स को आसान बनाने के लिए किसी भी तरह से SelectList/SelectListItem का विस्तार कर सकता हूं? – Dino

+0

नहीं, जब तक कि आप अपने स्वयं के एक्सटेंशन विधियों को बनाने के लिए स्रोत कोड से सभी कोड दोबारा नहीं लिखते, और 'SelectListItem' और' selectList' कक्षाएं (साथ ही थोड़ा और अधिक)। आपको लगता है कि आपको 'डेटा- *' विशेषताओं की आवश्यकता क्यों है? थोड़ा जावास्क्रिप्ट का उपयोग करना बहुत आसान होगा। –

+0

कभी-कभी मुझे मूल्य, अंक या नाम जैसे विकल्पों में अन्य मूल्य होने की आवश्यकता होती है, इसलिए मैं HTML के बजाय चयन के साथ जाता हूं।सहायक लेकिन मुझे डेटा-वैल- * विशेषताओं को मैन्युअल रूप से लागू करने की आवश्यकता है, इसलिए मैंने सोचा कि ऐसा कुछ क्लीनर, और उन सभी को संभालने का अधिक प्रभावी तरीका होना संभव होगा। – Dino

0

हो जाता है सुनिश्चित करें कि आपका रिटर्न चयन मूल्य एक स्ट्रिंग है और जब आप इसे अपने मॉडल में घोषित करते हैं तो नहीं और int।

उदाहरण:

public class MyModel 
{ 
    public string TipPopustaId { get; set; } 
} 
संबंधित मुद्दे