सवाल टाइप सूची के मॉडल के साथ ASP.NET MVC DropDownListFor


मेरे पास प्रकार की सूची के मॉडल के साथ एक दृश्य है और मैं उस पृष्ठ पर एक ड्रॉप डाउन सूची रखना चाहता हूं जिसमें ड्रॉप से ​​आइटम के रूप में सूची से सभी स्ट्रिंग शामिल हैं। मैं एमवीसी के लिए नया हूं, मैं इसे कैसे पूरा करूं?

मैंने कोशिश की:

@model List<string>
@Html.DropDownListFor(x => x)

लेकिन उसने एक त्रुटि फेंक दी। किसी भी मदद की सराहना की है।


44
2018-04-16 19:15


मूल


@ एचटीएमएल.ड्रॉपडाउन लिस्टफ़ोर (x => yourInputVariable, मॉडल) काम करना चाहिए - Kuttan Sujith


जवाब:


ड्रॉपडाउन सूची बनाने के लिए आपको दो गुणों की आवश्यकता है:

  1. एक संपत्ति जिसके लिए आप बाध्य करेंगे (आमतौर पर प्रकार पूर्णांक या स्ट्रिंग की एक स्केलर संपत्ति)
  2. दो गुणों वाली वस्तुओं की एक सूची (मूल्यों के लिए एक और पाठ के लिए एक)

आपके मामले में आपके पास केवल स्ट्रिंग की एक सूची है जिसका उपयोग उपयोग करने योग्य ड्रॉप डाउन सूची बनाने के लिए नहीं किया जा सकता है।

जबकि संख्या 2 के लिए। आपके पास मूल्य हो सकता है और पाठ वही हो सकता है जिसके लिए आपको एक संपत्ति की आवश्यकता होती है। आप सहायक के कमजोर टाइप किए गए संस्करण का उपयोग कर सकते हैं:

@model List<string>
@Html.DropDownList(
    "Foo", 
    new SelectList(
        Model.Select(x => new { Value = x, Text = x }),
        "Value",
        "Text"
    )
)

कहा पे Foo डीडीएल का नाम होगा और डिफ़ॉल्ट मॉडल बाइंडर द्वारा उपयोग किया जाएगा। तो जेनरेट मार्कअप इस तरह कुछ दिख सकता है:

<select name="Foo" id="Foo">
    <option value="item 1">item 1</option>
    <option value="item 2">item 2</option>
    <option value="item 3">item 3</option>
    ...
</select>

यह कहा जा रहा है कि ड्रॉप डाउन सूची के लिए एक बेहतर बेहतर मॉडल मॉडल निम्न है:

public class MyListModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

और फिर:

@model MyListModel
@Html.DropDownListFor(
    x => x.SelectedItemId,
    new SelectList(Model.Items, "Value", "Text")
)

और यदि आप इस सूची में कुछ विकल्प चुनना चाहते हैं तो आपको बस सेट करने की आवश्यकता है SelectedItemId इसी दृश्य मॉडल की संपत्ति संबंधित है Value में कुछ तत्व का Items संग्रह।


115
2018-04-16 19:17



यह काम नहीं कर रहा है, आप नियंत्रकों पर मूल्य कैसे प्राप्त करते हैं पोस्ट ... चयनित ItemId और आइटम दोनों शून्य हैं। - Marc


यदि आपके पास एक प्रकार की स्ट्रिंग की एक सूची है जिसे आप ड्रॉप डाउन सूची में चाहते हैं तो मैं निम्न कार्य करता हूं:

List<string> ShipNames = new List<string>(){"A", "A B", "A B C"};

@Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" })

जो इस तरह की एक ड्रॉप डाउन सूची देता है:

<select id="ShipNames" name="ShipNames" style="width:500px">
    <option value="">Select a Ship...</option>
    <option>A</option>
    <option>A B</option>
    <option>A B C</option>
</select>

नियंत्रक पद पर मूल्य प्राप्त करने के लिए; यदि आप एक मॉडल (उदा। MyViewModel) का उपयोग कर रहे हैं जिसमें संपत्ति के रूप में तारों की सूची है, क्योंकि आपने x => x.ShipNames निर्दिष्ट किए हैं, तो आपके पास बस विधि हस्ताक्षर है (क्योंकि यह मॉडल के भीतर क्रमबद्ध / deserialsed होगा):

सार्वजनिक ActionResult MyActionName (MyViewModel मॉडल)

यदि आप पोस्ट पर ड्रॉप डाउन सूची तक पहुंच बनाना चाहते हैं तो हस्ताक्षर बन जाता है:

सार्वजनिक ActionResult MyActionName (स्ट्रिंग शिप नाम)


2
2017-10-28 09:52



मुझे यकीन नहीं है कि यह काम करता है। पोस्ट MyActionName (MyViewModel मॉडल) के लिए, चयनित आइटम किस संपत्ति से बंधेगा। शिप नाम संपत्ति में केवल चयन योग्य मानों की सूची शामिल है। - RayLoveless