如何将select元素的第一个选项值设置为0而不是空选项值?

时间:2012-07-26 07:36:03

标签: asp.net-mvc asp.net-mvc-3

我想将第一个选项值设置为0,而不是将其留空。我怎么设置这个? 即

<select id="PatentId" name="ParentId">
     <option value="0">--Select--</option>
     <option value="1">Books</option>
      // other options
</select>

我的代码是

<div class="editor-field">
     @Html.DropDownList("ParentId","--Select--")
     @Html.ValidationMessageFor(model => model.ParentId)
</div>

2 个答案:

答案 0 :(得分:1)

使用内置帮助程序无法执行此操作。您必须编写自定义帮助程序或硬编码或其他任何内容。

或者只是使用视图模型和可以为空的整数:

[Required]
public int? ParentId { get; set; }

现在您将不再有任何问题或需要使用0作为第一选项。

最好使用强类型版本的帮助程序:

@Html.DropDownListFor(model => model.ParentId, Model.Parents, "--Select--")

但是如果由于某些其他原因(我目前没有看到)你需要使用0作为第一选项,那么你就是在荒野中自己。

答案 1 :(得分:1)

最后我发现以下代码正常工作

private SelectList AddFirstItem(SelectList list)
{
   List<SelectListItem> _list = list.ToList();
   _list.Insert(0, new SelectListItem() { Value = "0", Text = "--Select--" });
   return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text", list.SelectedValue);
}

保留“值”和“文字”。最后一个list.SelectedValue是按原样保留选定的值。

您可以使用上述功能

public ActionResult Create()
{
    ViewBag.ParentId = AddFirstItem(new SelectList(db.Categories, "Id", "Name"));
    return View();
} 

有效。