我可以通过哪种方式实现枚举值的下拉列表?
我有这样的枚举:
public enum ValueEnum : byte
{
[Description("Value 1")]
Value1 = 1,
[Description("Value 2")]
Value2 = 2,
[Description("Value 3")]
Value3 = 4
}
Run Code Online (Sandbox Code Playgroud)
我想从服务器端的多个选择而不是选定值列表中获取单个值:
public ActionResult ValueAction(ValueEnum result)
{
//too many code
return View();
}
Run Code Online (Sandbox Code Playgroud)
结果可以是ValueEnum.Value1
或ValueEnum.Value1 | ValueEnum.Value3
没有客户端总和,有没有办法做到这一点?
您可以像这个线程建议的那样从枚举中创建一个列表,并用它创建一个新的 SelectList 并将其保存在 ViewBag 中,然后在您的视图中创建一个 DropDownList 或 DropDownListFor 帮助器,并为 ViewBag 变量使用相同的名称对于选择元素。
//GET: ~/ValueController/ValueAction
public ActionResult ValueAction() {
Array values = Enum.GetValues(typeof(ValueEnum));
List<ListItem> items = new List<ListItem>(values.Length);
foreach(var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(ValueEnum), i),
Value = ((int)i).ToString()
});
}
ViewBag.valueEnum = new SelectList(items);
}
Run Code Online (Sandbox Code Playgroud)
看法:
@Html.DropDownList("valueEnum", null, htmlAttributes: new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)
然后,MVC 会自动将 ViewBag 内容分配给选择元素。
然后在您的后操作中设置其参数以接收一个简单的整数。
//POST: ~/ValueController/ValueAction
[HttpPost]
public ActionResult ValueAction(int valueEnum) {
//less code
return View();
}
Run Code Online (Sandbox Code Playgroud)