我有一个下拉列表,显示数据库中的项目列表,如下所示:
<div class="form-group">
@Html.LabelFor(model => model.ParentID, "ParentID")
<div class="col-md-10">
@Html.DropDownList("ParentID", null,"Select Item")
@Html.ValidationMessageFor(model => model.ParentID, "")
</div>
</div>
我使用ViewBag来传输列表,这是脚手架 - 它代码(我删除了html对象)。
我的模型接受此属性的空值,但我无法提供。
我需要一种方法在列表中插入一个null选项,或者保持“Select Item”的永久性。 我的问题仅存在于我想编辑对象并为此属性选择空值的情况。这是不可能的,因为我在列表中没有空值。
有可能使用下拉属性插入null选项吗?
答案 0 :(得分:1)
您需要在下拉列表中创建所需的SelectListItem
项集合,并将其作为第二个参数传递给DropDownListFor
方法
对于第3个参数,您需要设置默认(“空”)选项标签。
请参阅下面的示例。
查看代码示例:
@model ItemViewModel
@{
List<ItemViewModel> items = ViewBag.Items ?? new List<ItemViewModel>();
var selectListItems = items.Select(x => new SelectListItem() {Text = x.Name, Value = x.ParentID.ToString()});
}
<div class="jumbotron">
<h1>DropDown example</h1>
<p class="lead">dropdown with default value</p>
<p>@Html.DropDownListFor(m => m.ParentID, selectListItems, "Select Item...")</p>
</div>
控制器:
var items = new List<ItemViewModel>
{
new ItemViewModel {ParentID = 1, Name = "one"},
new ItemViewModel {ParentID = 2, Name = "two"},
new ItemViewModel {ParentID = 3, Name = "three"}
};
ViewBag.Items = items;
var model = new ItemViewModel();
//model.ParentId is null here
return View(model);
模型示例:
public class ItemViewModel
{
public int? ParentID { get; set; }
public string Name { get; set; }
}
结果: