2011-07-19 4 views
5

मैं रेज़र दृश्यों के साथ एमवीसी 3 का उपयोग कर रहा हूं और अपने कई वर्गों के लिए पुन: प्रयोज्य ड्रॉपडाउनलिस्ट बनाना चाहता हूं, लेकिन बहुत सी खोज के बाद मुझे ऐसा कोई उदाहरण नहीं मिला है जो मुझे इसकी आवश्यकता है। ..व्यवसाय वस्तुओं के लिए DropDownList के साथ पुन: प्रयोज्य संपादक टेम्पलेट

इस उदाहरण के लिए मैं दो वर्गों इस तरह है: -

public class Person 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Group Group { get; set; } 
} 

public class Group 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

मैं व्यक्ति के लिए एक काम नियंत्रक/देखें है। दृश्य एक DropDownListFor नियंत्रण नहीं है:

@model Person 

... 

@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList)) 

देखने के लिए, व्यक्ति वर्ग सीधे, नहीं एक मध्यस्थ के मॉडल का उपयोग करता के रूप में मैं इस स्तर पर एक दूसरे से सार एक के लिए एक बाध्यकारी कारण नहीं मिली है।

उपर्युक्त काम ठीक है ... नियंत्रक में मैं समूह से आईडी को देखता हूं, दृश्य से लौटा हुआ व्यक्ति इसे देखता हूं, इसे देखता हूं, और परिणाम के लिए व्यक्ति समूह को सेट करता हूं। काम करता है, लेकिन आदर्श नहीं है।

मुझे यहां एक बाइंडर मिला है: MVC DropDownList values posted to model aren't bound जो मेरे लिए यह काम करेगा, लेकिन मुझे अभी तक यह काम नहीं मिला है ... क्योंकि अगर मैं पुन: उपयोग कर सकता हूं तो यह वास्तव में उपयोगी लगता है।

मैं क्या करना चाहते हैं क्या है एक टेम्पलेट में कुछ इस तरह है: -

@model Group 

@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList)) 

और इस तरह एक दृश्य में इसका इस्तेमाल करते हैं: -

@Html.EditorFor(o => o.Group) 

हालांकि इसके बाद के संस्करण नहीं करता ' टी काम करने लगते हैं ... उपरोक्त संपादक के लिए लाइन पूरी कक्षा के लिए संपादकों को सम्मिलित करती है (उदाहरण के लिए समूह के लिए एक टेक्स्टबॉक्स भी।) टैग के लिए एक ड्रॉपडाउनलिस्ट डालने के बजाय

मेरे ऊपर उपरोक्त टी है Views.c Shared/editorTemplates के तहत Group.cshtml नामक फ़ाइल में emplate,

यदि यह काम करता है, तो जब भी किसी वर्ग के समूह की संपत्ति होती है, तो यह ड्रॉपडाउनलिस्ट संपादक डिफ़ॉल्ट रूप से उपयोग किया जाएगा (या कम से कम अगर कुछ विशेषता द्वारा निर्दिष्ट किया गया है)

प्रदान की किसी भी सलाह के लिए अग्रिम धन्यवाद ...

उत्तर

6

आप इस संभाल करने के लिए सूची उपयोगकर्ता नियंत्रण एक ड्रॉप डाउन बना सकते हैं। आपके साझा फ़ोल्डर के तहत EditorTemplates नामक एक फ़ोल्डर बनाएं और वहां अपना उपयोगकर्ता नियंत्रण रखें। सम्मेलन द्वारा एमवीसी, किसी भी संपादक टेम्पलेट्स के लिए साझा/संपादक टेम्पलेट्स में दिखता है। आप संपादक टेम्पलेट्स को कहां देख सकते हैं, लेकिन मैं यहां उस पर नहीं जाऊंगा।

एक बार जब आपका उपयोगकर्ता नियंत्रण बनाया गया है, तो आपको इंजन को यह बताने के लिए उचित संपत्ति को "UIHint" विशेषता के साथ सजाने की आवश्यकता होगी कि उस संपत्ति के लिए उसे किस संपादक का उपयोग करना चाहिए।

निम्नलिखित नमूना कार्यान्वयन होगा।

साझा/संपादक टेम्पलेट फ़ोल्डर में आपका उपयोगकर्ता नियंत्रण (_GroupsDropDown।

@model Group 

@Html.DropDownListFor(o => o.ID, (ViewData["groups"] as SelectList)) 

व्यक्ति में समूह संपत्ति को संशोधित रूप में निम्नानुसार UIHint विशेषता जोड़ने के लिए: इस मामले में cshtml) कैसा दिखेगा

**[UIHint("_GroupsDropDown")]** 
public Group Group { get; set; } 

अपने नियंत्रक में आप की आवश्यकता होगी

ViewData["groups"] = new SelectList(<YourGroupList>, "ID", "Name"); 

एक बार आपके पास उपरोक्त कोड होने के बाद आप संपादक की आवश्यकता के अनुसार संपादक का उपयोग कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+2

यह एक अच्छा जवाब है। मैं यह जोड़ना चाहता हूं कि आप टेम्पलेट्स को देखने के लिए 'EditorFor' कहां बता सकते हैं (जैसे कि आप आधारों को देखने के आधार पर विभिन्न टेम्पलेट्स का उपयोग करना चाहते हैं)। '@ Html.EditorFor (x => x.Filters.SelectedImprintId," ~/दृश्य/पुस्तकें/EditorTemplates ", Model.Filters.ImprintItems)': यह इस तरह दिखता है –

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