如何使用Enum的MVC Html Helper .DropDownListFor <>

Jed*_*Jed 5 asp.net-mvc html-helper html.dropdownlistfor razor asp.net-mvc-3

在我的MVC 3 Razor应用程序中,我有一个带有枚举的模型..

模型示例:

public class EmployeeModel
{
 public enum Title
 {
  Accountant = 111,
  Sales = 222,
  Production = 333 
 }

 [Required]
 public string Name {get; set;}

 [Required]
 public Title JobTitle {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的视图中,我想使用Html助手来构建一个Html表单...

查看示例:

@model ..Models.EmployeeModel

@using (Html.BeginForm())
{
 @Html.LabelFor(m => m.Name)
 @Html.TextBoxFor(m => m.Name)
 <br>

 @Html.LabelFor(m => m.JobTitle)
 @Html.DropDownListFor(m => m.JobTitle, ??How do I get Title enum values??)
 <br>

 <input type="submit />
}
Run Code Online (Sandbox Code Playgroud)

我试图实现的DropDownListFor的输出如下所示: 注意选项值与枚举的初始化值匹配

<select name="JobTitle">
 <option value="-1">Choose a Job Title</option>
 <option value="111">Accountant</option>
 <option value="222">Sales</option>
 <option value="333">Production</option>
</select>
Run Code Online (Sandbox Code Playgroud)

如何让DropDownListFor <>帮助器根据模型的标题枚举创建一个select/option元素?

此外,是否可以让DropDownListFor <>助手添加额外的(不是枚举的一部分)类似于上面示例中的"选择作业标题"选项?

Tom*_*han 3

您可能会获得String[]带有枚举值名称的 a 并从中创建一个下拉列表。在视图模型中,添加Titlestype属性SelectListItem并向其中添加枚举值和名称。您可以通过类型获取名称和值System.Enum

var defaultItem = new SelectListItem();
defaultItem.Value = -1;
defaultItem.Text = "Choose a title";
defaultItem.Selected = true;
model.TitleSelectItems.add(defaultItem);

String[] names = System.Enum.GetNames(typeof(Title));
Int[] values = System.Enum.GetValues(typeof(Title));

for (int i = 0; i<names.Length; i++)
{
    var item = new SelectListItem();
    item.Text = names[i];
    item.Value = values[i];
    model.TitleSelectItems.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

这有点丑陋,但它会起作用。