我在视图中渲染选择列表如下:
@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
中设置默认选定值?
答案 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);