如何在MVC 5中的dropdownFor模型中添加string.Empty选项

时间:2015-09-19 16:55:29

标签: c# asp.net-mvc entity-framework

我有一个下拉列表,显示数据库中的项目列表,如下所示:

<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选项吗?

1 个答案:

答案 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; }
    }

结果:

result - here we have a default value in dropdown