c# - 如何创建列表在使用枚举的控制器中
问题描述
控制器
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 而不是对其进行硬编码,这里的一些帖子是针对下拉列表的,但我想附加复选框而不是下拉列表。有没有可能做到。
解决方案
- 像下面这样使用
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();
推荐阅读
- macos - 在 ASP.NET Core 的 Mac Docker 上运行的 SQL Server 的连接字符串是什么?
- c - 为什么 wait() 函数(系统调用)永远不会返回(无限等待)
- c - 获取 16 位整数的低字节或高字节的最安全的跨平台方法是什么?
- command-line-interface - 从命令行执行模拟下的二进制文件?
- for-loop - 为什么 For 循环返回“尝试获取 Vector3 值的长度”
- python - 如何根据另一个数据框中的存在来更新数据框中列的值
- windows - AutoIt RDP 连接
- c++ - 在向量中查找对象
C++ - c# - 如何使用 Flowlayout 面板控件 C# 去 trought foreach
- python - 在没有结束编号的范围内设置 For 循环