DropdownListFor默认值

use*_*406 50 asp.net-mvc-3

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

its*_*att 76

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

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

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

  • 您要发送到View的SelectedTeamID的默认值是多少?在我的`Create.cshtml`中,它将默认为"--- Select A Dessert ---"选项(ID是一个整数,默认为0),而在我的`Edit.cshtml`中,它将默认为当前值是我的viewmodel中的`model.Dessert`.这可能是因为我的DessertIds从1开始(我的Desserts表中的主键从1开始).只是一个猜测,真的.我想这就是为什么会这样. (4认同)
  • 这会在下拉列表的顶部添加"--Please select--",但默认为下拉列表中的下一个项目,至少在我的示例中:@ Html.DropDownListFor(x => x.SelectedTeamID,new SelectList(Model) .Teams,"TeamID","TeamName")," - 请选择 - ") (2认同)
  • @Jez - 还有另一个重载允许字符串成为第三个参数.它添加一个null选项,字符串作为显示文本,但它不会使其成为默认值.默认值将是构建模型的任何值.只要'model.Dessert'属性可以为空,此答案就会起作用,因为选项标签将是下拉列表中的空值. (2认同)

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

然后我的剃刀看起来像:

@Html.DropDownListFor(m=>m.SelectedState, 
    Model.StateList().Default("Select One",""))
Run Code Online (Sandbox Code Playgroud)

  • 向项目添加静态类,并将这些方法添加到项目中.如果它不是全局项目命名空间,请确保尝试调用它们的页面导入命名空间.剃刀中的语法是`@using Myproject.Extensions`或任何你命名的类.如需更多参考,请阅读:http://msdn.microsoft.com/en-us/library/bb383977.aspx (3认同)