DropdownList для значения по умолчанию - PullRequest
50 голосов
/ 29 августа 2011

Есть ли простой способ добавить опцию по умолчанию "--Please select--" в DropDownListFor в MVC 3?

Ответы [ 4 ]

76 голосов
/ 29 августа 2011

Итак, я сделал что-то вроде этого:

@Html.DropDownListFor(model => model.Dessert, 
                      new SelectList(Model.AvailableDesserts, "DessertID", "DessertName"),
                      "---Select A Dessert ---")

Кажется, работает довольно хорошо. Dessert в моей viewmodel - та, которую выбрал пользователь. AvailableDesserts это коллекция из которых можно выбирать. Надеюсь, это поможет.

14 голосов
/ 29 августа 2011

У меня есть пара методов расширения на SelectList

    public static SelectList PreAppend(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
    {
        var items = new List<SelectListItem>();
        items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
        items.AddRange(list.Items.Cast<SelectListItem>().ToList());
        return new SelectList(items, "Value", "Text");
    }
    public static SelectList Append(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
    {
        var items = list.Items.Cast<SelectListItem>().ToList();
        items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
        return new SelectList(items, "Value", "Text");
    }
    public static SelectList Default(this SelectList list,string DataTextField,string SelectedValue)
    {
        return list.PreAppend(DataTextField, SelectedValue, true);
    }

Тогда моя бритва выглядит так:

@Html.DropDownListFor(m=>m.SelectedState, 
    Model.StateList().Default("Select One",""))
3 голосов
/ 12 ноября 2012

Привет, как насчет этого (в случае, если вы используете метод DisplayFor)

private IEnumerable<SelectListItem> AddDefaultOption(IEnumerable<SelectListItem> list, string dataTextField, string selectedValue)
    {
        var items = new List<SelectListItem>();
        items.Add(new SelectListItem() { Text = dataTextField, Value = selectedValue});
        items.AddRange(list);
        return items;
    }

Затем просто добавьте этот код в ваш контроллер

//lambda expression binding
ViewBag.YourList = db.YourTable.Select(x => x).ToList().Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.DisplayName.ToString()
        });

        ViewBag.YourList = AddDefaultOption(ViewBag.YourList, "Select One...", "null", true);

И, наконец, в представлении, которое вы могли бы отобразитьвыпадающий, выпадающий список просто так

    <div class="editor-label">
        Your Label
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
    </div>
0 голосов
/ 16 апреля 2015

Я хотел установить значение по умолчанию для того, что было передано в качестве параметра Url с именем SiteType:

    <div class="form-group">
        @Html.LabelFor(model => model.Type, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Type, ChangeOrderSite.SiteTypeNames.Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key.ToString() == Request["SiteType"] }), new { @class = "control-label col-md-2" })
            @Html.ValidationMessageFor(model => model.Type)
        </div>
    </div>

Мой раскрывающийся список - это список типов сайтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...