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

ASP MVC 5 @Html.EnumDropDownListFor Defaults to first Item

我有以下枚举:

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 而不是空选项。我没有在我的控制器中设置默认值,那么为什么它默认为第一项,我怎样才能让它默认为空选项值呢?

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

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

就其本质而言,它将 select 列表中的第一项,因此添加通用 "select" 选项是确保存在默认项的一种方式。

如果您依赖顺序,我强烈建议您为枚举值分配一个值,这样当您将其转换为等价的整数时,数字不会发生变化。

这个问题的解决方案是使模型枚举 属性 成为可空类型:

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

这样 属性 允许空条目,默认情况下它将为空。

您必须将数字添加到您的枚举值中,这些值不是 0。然后“Select 一个选项”将自动显示,如果您没有为您的模型分配任何值。

public enum EmploymentType
{
  FullTime = 1,
  PartTime = 2,
  Contract = 3
}

这里的其他答案也有效,但贡献了更多的工作。