2011-08-22 9 views
105

मुझे अपने एमवीसी 3 ऐप में DropDownListFor के साथ परेशानी हो रही है। मैं स्टैक ओवरफ्लो का उपयोग यह देखने के लिए कर रहा था कि उन्हें व्यू पर कैसे दिखाना है, लेकिन अब मुझे नहीं पता कि दृश्य मॉडल पर इसके संबंधित गुणों में मूल्यों को कैप्चर करने के तरीके को कैप्चर करना है। इसे काम करने के लिए मुझे एक आंतरिक कक्षा बनाना था जिसमें एक आईडी और एक मूल्य संपत्ति थी, तो मुझे DropDownListFor पैरामीटर आवश्यकताओं को पूरा करने के लिए IEnumerable<Contrib> का उपयोग करना पड़ा। अब, हालांकि, एमवीसी एफडब्ल्यू को इस व्यू-डाउन पर मेरे मूल्य मॉडल पर सरल स्ट्रिंग प्रॉपर्टी में चुने गए मान को मैप करना चाहिए?एमवीसी 3 DropDownListFor - एक साधारण उदाहरण?

public class MyViewModelClass 
{ 
    public class Contrib 
    { 
     public int ContribId { get; set; } 
     public string Value { get; set; } 
    } 

    public IEnumerable<Contrib> ContribTypeOptions = 
     new List<Contrib> 
     { 
      new Contrib {ContribId = 0, Value = "Payroll Deduction"}, 
      new Contrib {ContribId = 1, Value = "Bill Me"} 
     }; 

    [DisplayName("Contribution Type")] 
    public string ContribType { get; set; } 
} 

मेरे विचार में मैं इस तरह पृष्ठ पर लटकती जगह:

<div class="editor-label"> 
    @Html.LabelFor(m => m.ContribType) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
      new SelectList(Model.ContribTypeOptions, "ContribId", "Value")) 
</div> 

जब मैं प्रपत्र ContribType (बेशक) रिक्त है सबमिट करें।

ऐसा करने का सही तरीका क्या है?

उत्तर

157

आप इस तरह करना चाहिए:

@Html.DropDownListFor(m => m.ContribType, 
       new SelectList(Model.ContribTypeOptions, 
           "ContribId", "Value")) 

कहाँ:

m => m.ContribType 

एक संपत्ति जहां परिणाम मूल्य होगा।

+1

धन्यवाद सहेजना चाहते है !!! सर्गेई, यह वही है जो मैं कई घंटों के लिए देख रहा हूं। –

+0

धन्यवाद :) आपके उत्तर के लिए यहां से "- चुनें -" दिखाने का कोई तरीका है। ? – kbvishnu

+1

@VeeKeyBee, आप 'contribTypeOptions' सूची में नया आइटम जोड़ सकते हैं, उदाहरण के लिए 'नया Contrib {ContribId = -1, Value = "कृपया चुनें"}' और यह ड्रॉपडाउन सूची में दिखाया जाएगा। आप यह जांच सकते हैं कि 'ContribType' '-1' है या नहीं, इसका मतलब यह है कि उपयोगकर्ता ने कोई भी मूल्य –

6

एक DropDownList में गतिशील डेटा बाइंडिंग के लिए आप क्या कर सकते हैं निम्नलिखित:

की तरह नीचे

ViewBag.ContribTypeOptions = yourFunctionValue(); 

अब नीचे की तरह ध्यान में रखते हुए इस मान का उपयोग नियंत्रक में ViewBag बनाएँ:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
        "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please") 
6

मुझे लगता है कि यह मदद करेगा: नियंत्रक में सूची आइटम और चयनित मूल्य

प्राप्त करें
public ActionResult Edit(int id) 
{ 
    ItemsStore item = itemStoreRepository.FindById(id); 
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
             "Id", "Name",item.CategoryId); 

    // ViewBag to pass values to View and SelectList 
    //(get list of items,valuefield,textfield,selectedValue) 

    return View(item); 
} 

और देखें

@Html.DropDownList("CategoryId",String.Empty) 
+5

यह आमतौर पर इस तरह के दृश्य में आपके भंडार का पर्दाफाश करने के लिए एक ईश्वर पैटर्न नहीं है। –

0
 @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values") 
में

यहाँ मूल्य मॉडल की उस वस्तु है जहां आप अपने चयनित मूल्य

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