枚举的多选下拉列表

Mik*_*aev 7 c# asp.net-mvc

我可以通过哪种方式实现枚举值的下拉列表?

我有这样的枚举:

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.Value1ValueEnum.Value1 | ValueEnum.Value3

没有客户端总和,有没有办法做到这一点?

Tir*_*ium 0

您可以像这个线程建议的那样从枚举中创建一个列表,并用它创建一个新的 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)