मैं ASP.net MVC में SelectList में एक आइटम कैसे जोड़ सकता हूं


112

मूल रूप से मैं 0 के डिफ़ॉल्ट मान और "- चयन करें -" के पाठ मान के साथ SelectList की शुरुआत में एक आइटम सम्मिलित करना चाहता हूं।

कुछ इस तरह

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

क्या यह किया जा सकता है?


2
SelectListवास्तव में वस्तुओं को सीधे डेटा को बांधने के लिए सिर्फ एक सहायक लगता है। यदि आप List<SelectListItem>इसके बजाय मैन्युअल रूप से उपयोग किए गए आइटम जोड़ते हैं ।
काई हार्टमैन

स्वीकृत उत्तर और वोटों की संख्या को देखते हुए, क्या मैं आपको उस उत्तर को प्रतिबिंबित करने के लिए प्रश्न को थोड़ा बदलने का सुझाव दे सकता हूं i, e, "मैं ASP.net MVC में चयनकर्ता को एक रिक्त-मूल्य आइटम कैसे जोड़ सकता हूं"? लेकिन मूल प्रश्न का उत्तर देने के लिए @ एच-डॉग के लिए क्रेडिट और धन्यवाद "मैं एक आइटम कैसे जोड़ सकता हूं" प्रति प्रश्न
एंड्रयूडी

जवाबों:


150

वास्तव में ऐसा करने की आवश्यकता नहीं है जब तक आप 0. के मान पर जोर नहीं देते हैं। HtmlHelper DropDownList एक्सटेंशन आपको एक विकल्प लेबल सेट करने की अनुमति देता है जो कि शून्य मान के साथ चयन में प्रारंभिक मूल्य के रूप में दिखाई देता है। बस ड्रॉपडाउनलिस्ट हस्ताक्षर में से एक का उपयोग करें जिसमें विकल्प लेबल है।

<%= Html.DropDownList( "DropDownValue",
                       (IEnumerable<SelectListItem>)ViewData["Menu"],
                        "-- Select One --" ) %>

1
क्या होगा यदि आप वास्तव में 0 के मूल्य पर जोर देते हैं? यदि मान शून्य / खाली स्ट्रिंग है, तो यह मॉडल बाइंडिंग के साथ समस्याएँ पैदा कर सकता है।
केजेनसेन

2
यदि आप इसे इंट के रूप में वापस करने की उम्मीद कर रहे हैं, तो मैं इंट का उपयोग करूंगा? और अगर चयन नहीं किया गया है, तब भी इसे अशक्त छोड़ दें।
tvanfosson

13
इसके साथ समस्या यह है कि आप अपने चयनित आइटम को खो देते हैं।
37Stars 22

1
@JesseWebb मुझे संदेह है कि आपको यह सुनिश्चित करने की ज़रूरत है कि आप एक हस्ताक्षर का उपयोग कर रहे हैं जिसमें विकल्प लेबल, msdn.microsoft.com/en-us/library/ee703567.aspx शामिल है , @Html.DropDownListFor( m => m.MenuSelection, (IEnumerable<SelectListItem>)ViewBag.Menu, "Select One", null )उदाहरण के लिए, htmlAttributesहस्ताक्षर के साथ भ्रम से बचने के लिए अशक्त सहित। कि एक अभिव्यक्ति, मेनू गणना, और एक वस्तु (htmlAttributes) लेता है।
तवानफोसन

1
@tvanfosson - स्पष्ट करने के लिए धन्यवाद। मैंने इसे SelectList में IEnumerable के प्रकार के रूप में एक जटिल प्रकार के साथ उपयोग करने की कोशिश की। मुझे एक निर्दिष्ट करना था dataValueFieldऔर dataTestFieldजिसने एक विकल्पलेबल मान जोड़ते समय यह काम नहीं किया। यह शायद थोड़ा अधिक प्रयास के साथ काम कर सकता था लेकिन मैंने अभी वैकल्पिक समाधानों में से एक का उपयोग किया है। वैसे भी धन्यवाद!
जेसी वेब वेब

82

मुझे यह एक SelectListItem को पॉप्युलेट करके, एक सूची में परिवर्तित करके, और इंडेक्स 0 पर एक मान जोड़कर काम करने के लिए मिला।

List<SelectListItem> items = new SelectList(CurrentViewSetups, "SetupId", "SetupName", setupid).ToList(); 
items.Insert(0, (new SelectListItem { Text = "[None]", Value = "0" }));
ViewData["SetupsSelectList"] = items;

मैं HtmlHelper में OptionLabel अधिभार का उपयोग करने की सलाह देता हूं -> @ Html.DropDownListFor
2b77bee6-5445-4c77-b1eb-4df3e5

17

यह संभव है।

//Create the select list item you want to add
SelectListItem selListItem = new SelectListItem() { Value = "null", Text = "Select One" };

//Create a list of select list items - this will be returned as your select list
List<SelectListItem> newList = new List<SelectListItem>();

//Add select list item to list of selectlistitems
newList.Add(selListItem);

//Return the list of selectlistitems as a selectlist
return new SelectList(newList, "Value", "Text", null);

मैं HtmlHelper में OptionLabel अधिभार का उपयोग करने की सलाह देता हूं -> @ Html.DropDownListFor
2b77bee6-5445-4c77-b1eb-4df3e5

13

मुझे @ अशोओ का उत्तर पसंद आया लेकिन @ रजन रावल की तरह मुझे चयनित वस्तु स्थिति को संरक्षित करने की आवश्यकता थी, यदि कोई हो। इसलिए मैंने अपने तरीके से अपना अनुकूलन जोड़ाAddFirstItem()

public static SelectList AddFirstItem(SelectList origList, SelectListItem firstItem)
{
    List<SelectListItem> newList = origList.ToList();
    newList.Insert(0, firstItem);

    var selectedItem = newList.FirstOrDefault(item => item.Selected);
    var selectedItemValue = String.Empty;
    if (selectedItem != null)
    {
        selectedItemValue = selectedItem.Value;
    }

    return new SelectList(newList, "Value", "Text", selectedItemValue);
}

मैं HtmlHelper में OptionLabel अधिभार का उपयोग करने की सलाह देता हूं -> @ Html.DropDownListFor
2b77bee6-5445-4c77-b1eb-4df3e5

5
private SelectList AddFirstItem(SelectList list)
        {
            List<SelectListItem> _list = list.ToList();
            _list.Insert(0, new SelectListItem() { Value = "-1", Text = "This Is First Item" });
            return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text");
        }

यह वही करना चाहिए जो आपको चाहिए, बस अपनी चयन सूची भेजें और यह सूचकांक 0 में एक आइटम के साथ एक चयनित सूची लौटाएगा

आप जिस आइटम को सम्मिलित करना चाहते हैं, उसके पाठ, मान या यहां तक ​​कि इंडेक्स को भी सुरक्षित रख सकते हैं


क्या होगा अगर मेरे पास कुछ चयनित मूल्य हैं और मैं उन्हें संरक्षित करना चाहता हूं?
राजन रावल

मैं HtmlHelper में OptionLabel अधिभार का उपयोग करने की सलाह देता हूं -> @ Html.DropDownListFor
2b77bee6-5445-4c77-b1eb-4df3e5

5

यहाँ आपके लिए html सहायक है

public static SelectList IndividualNamesOrAll(this SelectList Object)
{
    MedicalVarianceViewsDataContext LinqCtx = new MedicalVarianceViewsDataContext();

    //not correct need individual view!
    var IndividualsListBoxRaw =  ( from x in LinqCtx.ViewIndividualsNames 
                                 orderby x.FullName
                                 select x);

    List<SelectListItem> items = new SelectList (
                               IndividualsListBoxRaw, 
                              "First_Hospital_Case_Nbr", 
                              "FullName"
                               ).ToList();

    items.Insert(0, (new SelectListItem { Text = "All Individuals", 
                                        Value = "0.0", 
                                        Selected = true }));

    Object = new SelectList (items,"Value","Text");

    return Object;
}

3

.ToList ()। डालें (..) विधि अपने सूची में रखता है एक तत्व। किसी भी स्थिति को निर्दिष्ट किया जा सकता है। ToList के बाद बस जोड़ें। Insert (0, "- - पहला आइटम - -")

तुम्हारा कोड

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

नया कोड

SelectList list = new SelectList(repository.func.ToList().Insert(0, "- - First Item - -"));
ListItem li = new ListItem(value, value);
list.items.add(li);

2

बहुत खूबसूरत नहीं लग सकता है, लेकिन मैं आमतौर पर ऐसा कुछ करता हूं:

    var items = repository.func.ToList();
    items.Insert(0, new funcItem { ID = 0, TextValue = "[None]" });
    ViewBag.MyData = new SelectList(items);

1

ठीक है मुझे स्वच्छ कोड पसंद है इसलिए मैंने इसे एक विस्तार विधि बनाया

static public class SelectListHelper
{
    static public SelectList Add(this SelectList list, string text, string value = "", ListPosition listPosition = ListPosition.First)
    {
        if (string.IsNullOrEmpty(value))
        {
            value = text;
        }
        var listItems = list.ToList();
        var lp = (int)listPosition;
        switch (lp)
        {
            case -1:
                lp = list.Count();
                break;
            case -2:
                lp = list.Count() / 2;
                break;
            case -3:
                var random = new Random();
                lp = random.Next(0, list.Count());
                break;
        }
        listItems.Insert(lp, new SelectListItem { Value = value, Text = text });
        list = new SelectList(listItems, "Value", "Text");
        return list;
    }

    public enum ListPosition
    {
        First = 0,
        Last = -1,
        Middle = -2,
        Random = -3
    }
}

उपयोग (उदाहरण के लिए):

var model = new VmRoutePicker
    {
     Routes =
     new SelectList(_dataSource.Routes.Select(r => r.RouteID).Distinct())
     };                                     
  model.Routes = model.Routes.Add("All", "All", SelectListHelper.ListPosition.Random);
//or
  model.Routes = model.Routes.Add("All");

1

जैसा कि इस विकल्प को कई अलग-अलग शिष्टाचारों में आवश्यकता हो सकती है, मैं किसी वस्तु को विकसित करने के लिए निष्कर्ष पर पहुंचा हूं ताकि इसका उपयोग विभिन्न परिदृश्यों और भविष्य की परियोजनाओं में किया जा सके

पहले इस वर्ग को अपनी परियोजना में जोड़ें

public class SelectListDefaults
{
    private IList<SelectListItem> getDefaultItems = new List<SelectListItem>();

    public SelectListDefaults()
    {
        this.AddDefaultItem("(All)", "-1");
    }
    public SelectListDefaults(string text, string value)
    {
        this.AddDefaultItem(text, value);
    }
    public IList<SelectListItem> GetDefaultItems
    {
        get
        {                
            return getDefaultItems;
        }

    }
    public void AddDefaultItem(string text, string value)
    {        
        getDefaultItems.Add(new SelectListItem() { Text = text, Value = value });                    
    }
}

अब कंट्रोलर एक्शन में आप ऐसा कर सकते हैं

    // Now you can do like this
    ViewBag.MainCategories = new SelectListDefaults().GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));
    // Or can change it by such a simple way
    ViewBag.MainCategories = new SelectListDefaults("Any","0").GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "0"));
    // And even can add more options
    SelectListDefaults listDefaults = new SelectListDefaults();
    listDefaults.AddDefaultItme("(Top 5)", "-5");
    // If Top 5 selected by user, you may need to do something here with db.MainCategories, or pass in parameter to method 
    ViewBag.MainCategories = listDefaults.GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));

और अंत में View में आप इस तरह कोड करेंगे।

@Html.DropDownList("DropDownListMainCategory", (IEnumerable<SelectListItem>)ViewBag.MainCategories, new { @class = "form-control", onchange = "this.form.submit();" })

0

एक काम के आसपास @ tvanfosson के उत्तर (चयनित उत्तर) का उपयोग करना है और विकल्प का मान 0 पर सेट करने के लिए JQuery (या जावास्क्रिप्ट) का उपयोग करना है:

$(document).ready(function () {
        $('#DropDownListId option:first').val('0');
    });

उम्मीद है की यह मदद करेगा।



-5

मुझे नहीं लगता कि किसी और के पास एक बेहतर विकल्प है ...

<% if (Model.VariableName == "" || Model.VariableName== null) { %>
   <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], "", 
        new{stlye=" "})%>
<% } else{ %>
<%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], 
        Model.VariableName, new{stlye=" "})%>
<% }>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.