0

我想使用枚举器填充选择器。我想用razor/VB或C#在View页面做这个操作

4

2 回答 2

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>

高温高压

于 2012-06-04T11:03:09.793 回答
0

对于简单的枚举名称,以下代码应该可以工作。

在剃刀/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
}
于 2012-06-04T10:42:49.210 回答