我觉得你有四个选项。首先,当您构建您的SelectList或SelectItemList的可枚举时,请在您的选项标签和默认值前加上选择。如果尚未在模型中选择其他值,则将其置于顶部将使其成为默认值。其次,您可以使用循环创建选项,在视图中“手动”构建选择(和选项)。同样,如果在模型中没有提供默认选择,则预先设置默认选择。第三,使用DropDownList扩展,但在加载页面后使用javascript修改第一个选项的值。
似乎无法使用DropDownList扩展名将值分配给optionLabel,因为它被硬编码为使用string.Empty。以下是http://www.codeplex.com/aspnet的相关代码片段。
// Make optionLabel the first item that gets rendered.
if (optionLabel != null) {
listItemBuilder.AppendLine(ListItemToOption(new SelectListItem() { Text = optionLabel, Value = String.Empty, Selected = false }));
}
编辑:最后,最好的办法是让你的模型取空值并将其标记为使用RequiredAttribute标签要求。我建议使用视图特定的模型而不是视图的实体模型。由于该值为可空,因此如果未选择值而回发,则空字符串将正常工作。将其设置为必需值将导致模型验证失败,并显示相应的消息,表明该值是必需的。这将允许您按原样使用DropdownList帮助程序。
public AreaViewModel
{
[Required]
public int? AreaId { get; set; }
public IEnumerable Areas { get; set; }
...
}
@Html.DropDownListFor(model => model.AreaId, Model.Areas, "Select Area Id")