ASP MVC 5 @ Html.EnumDropDownListFor默认为第一个项目

时间:2016-07-21 17:00:31

标签: c# razor asp.net-mvc-5 html.dropdownlistfor

我有以下枚举:

public enum EmploymentType
{
  FullTime,
  PartTime,
  Contract
}

public class MyViewModel
{
   public string searchTerm { get; set; }
   public EmploymentType EmploymentType { get; set; }
}

 public ActionResult Index(string searchTerm, string EmploymentType)
{
     // some other stuff

     var viewModel = new MyViewModel {  SearchTerm = search };

     return View(viewModel);      
}

@Html.EnumDropDownListFor(m => m.EmploymentType, "", new { @class = "form-control" })

当我加载页面时,下拉默认为第一项FullTime而不是空选项。我没有在我的控制器中设置默认值,所以为什么它默认为第一项,如何让它默认为空选项值呢?

2 个答案:

答案 0 :(得分:2)

解决方案是使模型枚举属性成为可以为空的类型:

public class MyViewModel
{
   public string searchTerm { get; set; }
   public EmploymentType? EmploymentType { get; set; }
}

这种方式属性允许空条目,默认情况下它将为null。

答案 1 :(得分:0)

如果您在枚举中添加一个空选项,则可以保证:

public enum EmploymentType
{
  [Display(Name = "< Select >")]
  Select = 0,
  FullTime = 1,
  PartTime = 2,
  Contract = 3
}

就其本质而言,它将选择列表中的第一项,因此添加通用“选择”选项是确保存在默认项目的方法。

如果您依赖订单,我强烈建议为枚举值赋值,因此如果将数字转换为等价整数,则数字不会移位。