Есть ли простой способ добавить параметр "--Please select--" по умолчанию в DropDownListFor в MVC 3?
DropdownListFor значение по умолчанию
Ответ 1
Итак, я сделал что-то вроде этого:
@Html.DropDownListFor(model => model.Dessert, 
                      new SelectList(Model.AvailableDesserts, "DessertID", "DessertName"),
                      "---Select A Dessert ---")
Кажется, все работает неплохо. Dessert в моей модели просмотра находится выбранная пользователем. AvailableDesserts - это набор из них. Надеюсь, что это поможет.
Ответ 2
У меня есть несколько методов расширения в 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
Привет, как насчет этого (в случае использования метода 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);
И наконец, в представлении вы можете отобразить выпадающее меню, combobox, как это показано
    <div class="editor-label">
        Your Label
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
    </div>
		Ответ 4
Я хотел установить значение по умолчанию для того, что было передано в качестве параметра Url Parameter под названием 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>
Мой раскрывающийся список - это список типов сайтов.