首页 > 解决方案 > 如何创建列表在使用枚举的控制器中

问题描述

控制器

        public ActionResult Index()
        {
            var view = new FruitVM();
            ViewBag.SelectFruitList = GetFruitList();
            return View(view);
        }
        public List<SelectListItem> GetFruitList()
        {
            List<SelectListItem> selectListItems = new List<SelectListItem>();
            selectListItems.Add(new SelectListItem { Text = "Apple", Value = "1"});
            selectListItems.Add(new SelectListItem { Text = "Orange", Value = "2" });
            selectListItems.Add(new SelectListItem { Text = "Banana", Value = "3" });
            selectListItems.Add(new SelectListItem { Text = "Others", Value = "0" });
            return selectListItems;
        }

指数

<div class="form-group">
    <label class="col-sm-3">Pick Fruit</label>
        <div class="col-sm-6">
            @foreach (var item in (List<SelectListItem>)ViewBag.SelectFruitList)
                {
                <label class="checkbox-inline"><input type="checkbox" value="@item.Value" name="Fruit">@item.Text </label>
                }
        </div>
</div>

枚举

    public enum EnumFruits
    {
        [Description("Apple")]
        A = 1,
        [Description("Orange")]
        B = 2,
        [Description("Banana")]
        C = 3,
        [Description("Others")]
        O = 0,
    }

如何使用 Enum 而不是对其进行硬编码,这里的一些帖子是针对下拉列表的,但我想附加复选框而不是下拉列表。有没有可能做到。

标签: c#asp.net-mvcmodel-view-controller

解决方案


现场演示在这里

  • 像下面这样使用Enum.GetValues来实现它。
  • 命名的方法GetEnumDescription可以帮助您获取description枚举。在此处阅读有用的帖子:如何从值中获取 C# 枚举描述?

public static string GetEnumDescription(Enum value)
{
    var fi = value.GetType().GetField(value.ToString());

    var attributes = fi.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[];

    if (attributes != null && attributes.Any())
    {
        return attributes.First().Description;
    }

    return value.ToString();
}   

var selectListItems  = Enum.GetValues(typeof(EnumFruits))
    .Cast<EnumFruits>()
    .Select(v => new SelectListItem { Text = GetEnumDescription((EnumFruits)v), Value = (int)v } )
    .ToList();

在此处输入图像描述


推荐阅读