使用选项值将项添加到@ Html.DropDownList并设置默认选中

时间:2016-11-09 14:31:03

标签: c# asp.net-mvc razor

我在视图中渲染选择列表如下:

@Html.DropDownList("SelectCategory", (SelectList)ViewBag.Categories, "All")

我这样填充它:

ViewBag.Categories = new SelectList(db.Categories, "Id", "Name");

呈现:

<select id="SelectCategory" name="SelectCategory">
<option value="">All</option>
<option value="1">Fruit</option>
<option value="44">T-Shirts</option>
</select>

的问题:

1)All的选项值为空,如何将值放在那里,说0

2)如何在@Html.DropDownList中设置默认选定值?

2 个答案:

答案 0 :(得分:2)

DropDownList()方法的第3个参数会添加一个&#39;标签&#39;值为null的选项。通常,选项文本类似于&#34;请选择&#34;其目的是强制用户进行有效选择。如果选择了label选项,则会提交null值且ModelState无效(假设您需要绑定的属性)。

如果您想要<option value="0">All</option>的附加选项,则需要在SelectList视频中生成该选项,例如

List<SelectListItem> categories = db.Categories.Select(x => new SelectListItem()
{
    Value = x.Id.ToString(), // assumes Id is not already typeof string
    Text = x.Name
}).ToList();
categories.Insert(0, new SelectListItem(){ Value = "0", Text = "All" }) // Or .Add() to add as the last option
ViewBag.Categories = categories;

并在视图中(注意删除第3个参数是你不想要标签选项)

@Html.DropDownList("SelectCategory", (IEnumerable<SelectListItem>)ViewBag.Categories, "Please select")

为了选择&#39;最初,您需要在将模型传递给视图之前设置绑定属性的值,因此如果属性SelectCategory的值为"0",则为&#34;所有& #34;首次显示视图时将选择选项。如果是"44",那么&#34; T恤&#34;选项将被选中。如果SelectCategory的值与其中一个选项值不匹配,或者是null,那么将选择第一个选项(因为必须是soemthing)

答案 1 :(得分:0)

你可以建立你的选择“手”

<select>
@foreach (var item in optionList)
{
    if(myCondition)
    {
        <option value="@item.Value" selected="selected">@item.Text</option> 
    }
    else 
    {
         <option value="@item.Value">@item.Text</option>
    }
} 
</select>

或在视图中使用Linq

var list = optionsList.Select(x => new SelectListItem { Text = x.Text, Value = x.Value, Selected = myCondition });

然后您可以在其中一个Html.DropdownList中使用该列表 这是完整的例子

int catId = // Gets the catId to select somehow
IEnumerable<SelectListItem> options = optionsList
    .Select(x => new SelectListItem { 
         Text = x.Text, 
         Value = x.Value, 
         Selected = x.Value == catId
     }); // catId 

然后你就这样使用它:

 @Html.DropdownList("id-of-the-dropdown", options);