Asp.net mvc 如何在razor的查看页面中使用带有MVC的枚举以编程方式填充选择器

Asp.net mvc 如何在razor的查看页面中使用带有MVC的枚举以编程方式填充选择器,asp.net-mvc,razor,enums,Asp.net Mvc,Razor,Enums,我想使用枚举器填充选择器。我想使用razor/VB或C#在查看页面中执行此操作。对于简单的枚举名称,以下代码应该可以工作 用剃刀/C# 如果您有一个类似于下面的枚举,那么您可能更喜欢将名称拆分为大写字母 public enum Gender { NotSpecified = 0, Male, Female } 下面是拆分并返回SelectList的代码,以在UI中显示枚举,但在模型中将所选值作为枚举返回 拆分逻辑来自一个SO。多亏了海报 public class Enu

我想使用枚举器填充选择器。我想使用razor/VB或C#

在查看页面中执行此操作。对于简单的枚举名称,以下代码应该可以工作

用剃刀/C#


如果您有一个类似于下面的枚举,那么您可能更喜欢将名称拆分为大写字母

public enum Gender
{
    NotSpecified = 0,
    Male,
    Female
}
下面是拆分并返回SelectList的代码,以在UI中显示枚举,但在模型中将所选值作为枚举返回

拆分逻辑来自一个SO。多亏了海报

public class EnumHelper
{
    public static SelectList GetSelectList<T>()
    {
        Type enumType = typeof(T);
        if (!enumType.IsEnum)
            throw new ArgumentException("The specified type is not enum");

        List<SelectListItem> items = new List<SelectListItem>();

        var values = Enum.GetValues(enumType);

        foreach (var value in values)
        {
            items.Add(new SelectListItem()
            {
                Value = value.ToString(),

                // Split at capital letters
                Text = Regex.Replace(Enum.GetName(enumType, value), "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1 ")
            });
        }

        return new SelectList(items, "Value", "Text");
    }
公共类枚举帮助器
{
公共静态SelectList GetSelectList()
{
类型enumType=typeof(T);
如果(!enumType.IsEnum)
抛出新ArgumentException(“指定的类型不是枚举”);
列表项=新列表();
var values=Enum.GetValues(enumType);
foreach(值中的var值)
{
items.Add(新建SelectListItem()
{
Value=Value.ToString(),
//以大写字母分开
Text=Regex.Replace(Enum.GetName(enumType,value),“([a-z](?=[a-z])|[a-z](?=[a-z][a-z])”,“$1”)
});
}
返回新的选择列表(项目、“值”、“文本”);
}
下面是razor中的示例用法

<div class="editor-label">
    @Html.LabelFor(model => model.Gender)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Gender, EnumHelper.GetSelectList<Gender>())
    @Html.ValidationMessageFor(model => model.Gender)
</div>

@LabelFor(model=>model.Gender)
@Html.DropDownListFor(model=>model.Gender,EnumHelper.GetSelectList())
@Html.ValidationMessageFor(model=>model.Gender)

public class EnumHelper
{
    public static SelectList GetSelectList<T>()
    {
        Type enumType = typeof(T);
        if (!enumType.IsEnum)
            throw new ArgumentException("The specified type is not enum");

        List<SelectListItem> items = new List<SelectListItem>();

        var values = Enum.GetValues(enumType);

        foreach (var value in values)
        {
            items.Add(new SelectListItem()
            {
                Value = value.ToString(),

                // Split at capital letters
                Text = Regex.Replace(Enum.GetName(enumType, value), "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1 ")
            });
        }

        return new SelectList(items, "Value", "Text");
    }
<div class="editor-label">
    @Html.LabelFor(model => model.Gender)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Gender, EnumHelper.GetSelectList<Gender>())
    @Html.ValidationMessageFor(model => model.Gender)
</div>