0

I have a class called Options where I'm keeping a bunch of enumerables for different options. One of these is a Sizes enumerable which is used in my Ball model. How do I get my Size field for my Ball to display as a dropdown list when creating a new Ball? I assume I need to make an Editor Template but I don't know what that's supposed to look like.

Here's some example code:

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>

How do I get EditorForModel to display the enum properties as DropDownLists with the possible values of the Enum?

Joe Higley
  • 1,762
  • 3
  • 20
  • 33
  • EditorForModel does not create dropdownlist by its own. This might help you to find your answer http://stackoverflow.com/questions/17760271/html-editorformodel-dropdown and http://stackoverflow.com/questions/972307/can-you-loop-through-all-enum-values – Chetan May 04 '17 at 23:40

1 Answers1

0

I figured it out with a bit of help from this source

I didn't create a helper like it suggests but I used the same principles from the helper to create a EditorTemplate for my Sizes enum. Here's what it looks like:

Sizes.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)

Now when I call @Html.EditorForModel() in my Ball.cshtml, it references this editor template and creates a dropdown with all the options in the enum.

Joe Higley
  • 1,762
  • 3
  • 20
  • 33