如何将项添加到ASP.net MVC中的SelectList

109 asp.net-mvc selectlist

基本上我想在SelectList的开头插入一个项目,默认值为0,文本值为" - 选择一个 - "

就像是

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

tva*_*son 148

除非你坚持使用值0,否则确实没有必要这样做.HtmlHelper DropDownList扩展允许你设置一个选项标签,它在select值中显示为初始值,带有空值.只需使用具有选项标签的DropDownList签名之一.

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

  • 解决这个问题的方法是丢失所选项目. (12认同)
  • 如果您确实坚持使用 0 的值怎么办?如果值为 null/空字符串,则可能会导致模型绑定出现问题。 (3认同)
  • 如果你期望它作为一个int,那么我会使用int?如果没有选择,仍然保留为null. (2认同)

dav*_*459 79

我通过填充SelectListItem,转换为List,并在索引0处添加值来实现此功能.

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


小智 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);
Run Code Online (Sandbox Code Playgroud)

  • 如果您从一个已经包含项目的“SelectList”开始,就像OP的情况一样,还需要以下行来保留这些项目:“newList.AddRange(myOriginalSelectList)”。 (3认同)

H D*_*Dog 13

我喜欢@AshOoO的答案,但像@Rajan Rawal我需要保留所选的项目状态,如果有的话.所以我将自定义添加到他的方法中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);
}
Run Code Online (Sandbox Code Playgroud)


hid*_*den 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;
}
Run Code Online (Sandbox Code Playgroud)


Ash*_*OoO 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");
        }
Run Code Online (Sandbox Code Playgroud)

这应该做你需要的,只需发送你的选择列表,它就会返回一个索引为 0 的项目的选择列表

您可以自定义需要插入的项目的文本、值甚至索引