MVC3 DropDownListFor - एक सरल उदाहरण है?


112

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

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वह (निश्चित रूप से) शून्य होता है।

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

जवाबों:


166

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

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

कहाँ पे:

m => m.ContribType

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


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

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

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

9
आप ऐसा कर सकते हैं:@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
सर्गेई गवरुक

1
@SergeyGavruk। इस उत्तर का उपयोग कुछ हालिया प्रश्नों पर एक डुबकी के रूप में किया गया है, लेकिन कुछ उपयोगकर्ताओं को बयान के कारण भ्रमित कर रहा है और चयन सूची निर्माता का अंतिम पैरामाम एक चयनित मूल्य है - अंतिम पैरामीटर को विधि द्वारा नजरअंदाज कर दिया जाता है (जो आंतरिक रूप से अपना निर्माण करता है SelectList) । इसकी संपत्ति का मूल्य ( ContribType) जो यह निर्धारित करता है कि जो चुना गया है (वह मॉडल बाध्यकारी कैसे काम करता है) और कोड बस होना चाहिए @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")क्या आप उत्तर को सही करने के लिए संपादित कर सकते हैं।

7

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

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
यह आमतौर पर इस तरह के दृश्य के लिए अपने भंडार को उजागर करने के लिए एक देव पैटर्न नहीं है।
एंड्रे पेना

6

ड्रॉपडाउनलिस्ट में डायनामिक डेटा बाइंड करने के लिए आप निम्न कार्य कर सकते हैं:

नीचे की तरह नियंत्रक में ViewBag बनाएँ

ViewBag.ContribTypeOptions = yourFunctionValue();

अब इस मूल्य को नीचे की तरह देखें:

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

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

यहां वैल्यू उस मॉडल का ऑब्जेक्ट है जहां आप अपने चयनित मूल्य को सहेजना चाहते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.