2013-03-04 9 views
9

मेरे पास एक मॉडल है जिसमें कर्मचारी की जानकारी शामिल है। मेरे मॉडल में शहर नामक एक संपत्ति है जो कर्मचारी के शहर को परिभाषित करती है जिसमें वह रहता है। प्रॉपर्टीएमवीसी ड्रॉपडाउनलिस्ट() मूल बातें

public string City{get;set;} 

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

@Html.DropDownListFor(m=>m.City,new SelectList()) 

कृपया मुझे बताओ कि "वहाँ (सीधे selectList में dropdownlist के लिए विकल्पों को परिभाषित करने के) पद्धति की तरह ... html में किसी भी तरह से है?" कि

यदि नहीं, तो मुझे इस ड्रॉप डाउन के लिए कक्षा को कहां परिभाषित किया जाना चाहिए, कहां कॉल करना है और कहां प्रस्तुत करना है। मुझे नहीं पता कि मूल्य कहां परिभाषित किया जाए? मैं बहुत उलझन में हूं क्योंकि यह एमवीसी है और हमें चिंता को अलग करना है और मुझे लगता है कि हम कहीं भी कुछ भी परिभाषित नहीं कर सकते हैं?

अग्रिम धन्यवाद ..

+0

मूल्य कहां से आएंगे? क्या यह डेटाबेस तालिका में एक विदेशी कुंजी होना चाहिए, हार्डकोडेड मान, कुछ और? –

+0

http://stackoverflow.com/questions/10484774/dropdown-in-mvc –

उत्तर

10

आपके पास कम से कम दो विकल्प:

1.) अपने मॉडल के लिए एक सूची, सरणी, या शहर के किसी भी अन्य संग्रह प्रकार जोड़ें

2.) अपने मॉडल

विकल्प 1 स्ट्रिंग्स की सरणी के रूप में सरल कुछ हो सकता है, या City ऑब्जेक्ट्स के IEnumerable कह सकता है। आपको DropDownList बाइंडिंग के हिस्से के रूप में दृश्य में SelectListItem ऑब्जेक्ट्स के संग्रह में इस संपत्ति को बदलने की आवश्यकता होगी।

विकल्प 2 को DropDownList पर सीधे बाध्यकारी करने में सक्षम होने का लाभ है, लेकिन यह आवश्यक है कि आप कार्रवाई विधि के भीतर सूची बनाएं।

फिर अंत परिणाम समान है, यह सिर्फ एक मामला है कि आप एसओसी के बारे में कितना pedantic होना चाहते हैं।

उदाहरण के लिए (यह मानते हुए कि आप एक संपत्ति Cities बुलाया जोड़ने):

@Html.DropDownListFor(m=>m.City, Model.Cities.Select(city => new SelectListItem() 
{ 
    Text = city, 
    Value = city, 
    Selected = city == Model.City 
}) 

संपादित करें:

अपनी टिप्पणी का जवाब करने के लिए, मैं कुछ मान्यताओं बनाने के लिए किया है। मुझे लगता है कि आपके पास EmployeeModel नामक एक मॉडल है। इस मॉडल में एक संपत्ति है, City, यह एक सादा स्ट्रिंग है। तो, यह अपने मॉडल की एक आंशिक है, के रूप में मुझे लगता है कि यह होने के लिए:

:

public class EmployeeModel 
{ 
    public string City { get; set; } 

    // ... other properties ... 
} 

तो, अगर आप अपने लटकती के लिए बाध्य करने के लिए एक संपत्ति जोड़ने की जरूरत है, तो आप निम्न में से एक करना होगा

public class EmployeeModel 
{ 
    public string City { get; set; } 

    public IEnumerable<string> Cities { get; set; } 

    // ... other properties ... 
} 

या

public class EmployeeModel 
{ 
    public string City { get; set; } 

    public SelectList Cities { get; set; } 

    // ... other properties ... 
} 

यह नया संपत्ति शहरों है कि आप अपने प्रयोक्ता (ओं) से चुन सकते हैं की सूची होगी।

आप पहला विकल्प चुनते हैं, तो आप अपने डेटास्टोर से IEnumerable लोड, और फिर अपने दृश्य है, जो एक नया SelectListItem वस्तु में Cities प्रॉपर्टी में एक स्ट्रिंग परियोजना के लिए LINQ का उपयोग करता है में ऊपर पहला उदाहरण का उपयोग करें।

यदि आप दूसरे विकल्प के साथ जाते हैं, तो आप दृश्य में मॉडल को पार करने से पहले कार्रवाई में SelectList बनाते हैं। यह बहुत मुश्किल नहीं है, क्योंकि कक्षा एक रचनाकार प्रदान करती है जो IEnumerable (शहरों की आपकी सूची) और "चयनित मूल्य" लेती है, जो City संपत्ति होगी (http://msdn.microsoft.com/en-us/library/dd460123%28v=vs.108%29.aspx देखें)।

model.Cities = new SelectList(GetCities(), model.City); 

यह, ज़ाहिर है, मान लिया गया है कि आप एक सहायक विधि (GetCities()) चाहे वे कहीं भी जमा हो जाती है से अपने शहरों को लोड करने के लिए है: अपने कोड कुछ ऐसा दिखाई देगा। आपके विचार तो कुछ इस तरह होगा:

@Html.DropDownListFor(m=>m.City, model.Cities) 

दृश्य इंजन तो इन SelectListItem रों का उपयोग करता <select> तत्व का निर्माण करने के लिए और इसे <option> तत्वों है।

+0

क्या आप 1 और 2 विकल्प अधिक विस्तृत कर सकते हैं ताकि मैं आसानी से समझ सकूं। मुझे अभी भी समस्या का सामना करना पड़ रहा है। –

2

आप अपने मॉडल में इस राशि सकता है, यह जल्दी से, हासिल की है, हालांकि मैं यह सिफारिश नहीं होगा:

public class Place 
{ 
    public string City{get;set;} 
    public SelectListItem[] Cities() 
    { 
     return new SelectListItem[2] { new SelectListItem() { Text = "London" }, new SelectListItem() { Text = "New York" } }; 
    } 
} 

... और आपके विचार

@Html.DropDownListFor(m => m.City, Model.Cities()) 

मैं के लिए सबसे अच्छी जगह लगता है ऐसा कुछ (लेकिन थोड़ा और जटिल है) आपका खुद का htmlhelper है और उपयोग कुछ ऐसा दिख सकता है:

@html.CityDropDownFor(m => m.City) 

आप शहरों को अच्छी तरह से कैश कर सकते हैं और यह आपके मॉडलों से डेटा और यूआई काम करता है।

यदि आप अपने स्वयं के हेल्पर्स बनाने के बारे में अधिक जानना चाहते हैं, तो मैं थोड़ा सा [पढ़ना] सुझाव दूंगा। 1

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