Как отобразить Enum как DropDownList в .Net MVC Core

У меня есть класс Options, в котором я храню кучу перечислений для разных вариантов. Одним из них является перечисление Sizes, которое используется в моей модели Ball. Как сделать так, чтобы поле «Размер» для моего мяча отображалось в виде раскрывающегося списка при создании нового мяча? Я предполагаю, что мне нужно создать шаблон редактора, но я не знаю, как он должен выглядеть.

Вот пример кода:

Options.cs

public class Options
{
    public enum Sizes
    {
        Small,
        Medium,
        Large
    };

    public enum Material
    {
        Rubber,
        Plastic,
        Metal
    };
}

Ball.cs

public class Ball
{
    public string Name { get; set; }
    public Options.Sizes Size { get; set; }
    public Options.Material Material { get; set; }
}

Index.cshtml @model WebApplication.Models.Ball

<form asp-action="Create" asp-controller="Ball">
    @Html.EditorForModel()
    <input type="submit" value="Submit"/>
</form>

Как заставить EditorForModel отображать свойства перечисления в виде DropDownLists с возможными значениями Enum?


person Joe Higley    schedule 04.05.2017    source источник
comment
EditorForModel не создает раскрывающийся список самостоятельно. Это может помочь вам найти ответ stackoverflow.com/questions/17760271/ и stackoverflow.com/questions /972307/   -  person Chetan Ranpariya    schedule 05.05.2017


Ответы (1)


Я понял это с помощью этого источник

Я не создавал помощника, как это предлагается, но я использовал те же принципы из помощника, чтобы создать EditorTemplate для моего перечисления размеров. Вот как это выглядит:

Размеры.cshtml

@model Options.Sizes 

@{ 
    var values = Enum.GetValues(typeof(Options.Sizes)).Cast<Options.Sizes>();

    IEnumerable<SelectListItem> items =
        from value in values
        select new SelectListItem
        {
            Text = value.ToString(),
            Value = value.ToString(),
            Selected = (value.Equals(Options.Sizes.ATX_Full))
        };
}

@Html.DropDownList("Size", items)

Теперь, когда я вызываю @Html.EditorForModel() в своем Ball.cshtml, он ссылается на этот шаблон редактора и создает раскрывающийся список со всеми параметрами в перечислении.

person Joe Higley    schedule 05.05.2017