c# - 从 GetEnumSelectList<> 获取文本值而不是索引值
问题描述
GetEnumSelectList<> 返回一个索引值而不是文本值。如何获取文本值?
Usage:
<select asp-for="Policy" asp-items="Html.GetEnumSelectList(typeof(PolicyEnum))" class="form-control"></select>
Results:
<select class="form-control" id="Policy" name="Policy">
<option value="0">SuperAdmin</option>
<option value="1">Admin</option>
<option value="2">User</option>
<option value="3">ClientAdmin</option>
<option value="4">ClientUser</option>
</select>
Desired Results:
<select class="form-control" id="Policy" name="Policy">
<option value="SuperAdmin">SuperAdmin</option>
<option value="Admin">Admin</option>
<option value="User">User</option>
<option value="ClientAdmin">ClientAdmin</option>
<option value="ClientUser">ClientUser</option>
</select>
解决方案
如果你只需要SuperAdmin
,你可以定义下面的扩展:
public static class ExtensionMethods
{
public static IEnumerable<SelectListItem> GetEnumValueSelectList<TEnum>(this IHtmlHelper htmlHelper) where TEnum : struct
{
return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
.Select(x =>
new SelectListItem
{
Text = x.ToString(),
Value = x.ToString()
}), "Value", "Text");
}
}
和用法:
<select asp-items="Html.GetEnumValueSelectList<PolicyEnum>()" class="form-control"></select>
如果你需要[EnumMember(Value = "Admin")]
,你可以试试
public static class ExtensionMethods
{
public static IEnumerable<SelectListItem> GetEnumMemberSelectList<TEnum>(this IHtmlHelper htmlHelper) where TEnum : struct
{
return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
.Select(x =>
new SelectListItem
{
Text = x.EnumMemberValue(),
Value = x.ToString()
}), "Value", "Text");
}
public static string EnumMemberValue(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
EnumMemberAttribute attribute
= Attribute.GetCustomAttribute(field, typeof(EnumMemberAttribute))
as EnumMemberAttribute;
return attribute == null ? value.ToString() : attribute.Value;
}
}
推荐阅读
- consul - 在consul哪里获取微服务注册时间
- kubernetes - 应用编辑后 kubectl 重新格式化“脚本”块
- c# - Unity 中的碰撞器问题(近战 RPG)
- containers - 在 Kubeflow 中运行自定义容器时,如何将参数传递给容器?
- excel - 将数据透视表复制到 Outlook,然后发送
- angular - 如何按属性值对对象数组进行排序
- javascript - 为什么我在使用 str.replace() 时得到错误的输出?
- python - 无法从 python 自动化脚本构建虚拟机
- destructuring - 解构需要waitFor
- bash - 如何在 bash 脚本中用多行/流替换单个流/行?