DropdownListFor默认值

时间:2011-08-29 11:44:38

标签: asp.net-mvc-3

有没有一种简单的方法可以在MVC 3中为DropDownListFor添加“--Please select--”默认选项?

5 个答案:

答案 0 :(得分:76)

所以,我做了这样的事情:

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

似乎工作得很好。我的viewmodel中的Dessert是用户选择的。 AvailableDesserts是一个可供选择的集合。希望有所帮助。

答案 1 :(得分:14)

我在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",""))

答案 2 :(得分: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);

最后在View中你可以显示一个下拉列表,就像这样的组合框

    <div class="editor-label">
        Your Label
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
    </div>

答案 3 :(得分:0)

我想将默认值设置为传入的名为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>

我的下拉列表是网站类型。

答案 4 :(得分:0)

我喜欢以下方法:

@Html.DropDownListFor(m => m.SelectedId, new SelectList(Model.Items, "Id", "Name"), new SelectListItem() { Text = "None", Value = "", Selected = true }.Text, new { @class = "form-control search-select-input btn btn-block btn-outline-secondary dropdown-toggle p-1" })

其中Items是要在下拉列表中显示的IEnumerable类型。您可以在最后一个参数中更改所需的任何引导类。

通过这种方式,您可以设置默认标签并根据需要指定标签的值。