如何使用带有razor的视图页面中带有MVC的枚举以编程方式填充选择器

时间:2012-06-04 08:29:08

标签: asp.net-mvc razor enums

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

的View页面中执行此操作

2 个答案:

答案 0 :(得分:1)

如果你有类似下面的枚举,那么你可能更喜欢用大写字母拆分名字。

public enum Gender
{
    NotSpecified = 0,
    Male,
    Female
}

以下是拆分和返回SelectList的代码,以显示UI中的枚举,但将所选值作为枚举返回到模型中。

拆分逻辑来自SO post之一。感谢海报。

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>

HTH

答案 1 :(得分:0)

对于简单的枚举名称,以下代码应该有效。

在Razor / C#中

<tr>
    <th>
        <div class="editor-label">
            @Html.LabelFor(model => model.Gender)
        </div>
    </th>
    <td>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.Gender, new SelectList(Enum.GetValues(typeof(Gender))))
            @Html.ValidationMessageFor(model => model.Gender)
        </div>
    </td>
</tr>

我的枚举很简单,就像这样

public enum Gender
{
    Male,
    Female
}