Introduction
A collection of HTML helpers that generate dropdownlists for enums, with or without localization support.
Table of contents
HTML Helpers overview
I’ve created a set of HTML helpers that generate a DropDownList
for an enum. Those helpers are similar
to the DropDownList method
and DropDownListFor
method, with the only difference being that those helpers will populate the
DropDownList
with the elements of the specified enum.
Some examples – Basic usage
Let’s assume the following model:
public enum WeekDay
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
public class WeeklyEvent
{
public string Title { get; set; }
public WeekDay Day { get; set; }
public WeekDay? AnotherDay { get; set; }
}
Setting the name of the element and default empty item text
This is the most basic usage, the generated text will be enumValue.ToString()
:
@Html.EnumDropDownList<WeekDay>("eventDay", "Select an item")
@Html.EnumDropDownListFor<WeeklyEvent, WeekDay>(x => x.Day, "Select an item")
Html.EnumDropDownListFor
works with nullables too:
@Html.EnumDropDownListFor<WeeklyEvent, WeekDay?>(x => x.AnotherDay, "Select an item")
Using the [Description] attribute
You can customize the text using DescriptionAttribute
:
public enum WeekDay
{
[Description("Domingo")]
Sunday,
[Description("Segunda")]
Monday,
[Description("Terça")]
Tuesday,
[Description("Quarta")]
Wednesday,
[Description("Quinta")]
Thursday,
[Description("Sexta")]
Friday,
[Description("Sábado")]
Saturday
}
Using custom HTML attributes
Just like DropDownList
and
DropDownListFor
, you can
use custom HTML attributes.
@Html.EnumDropDownList<WeekDay>("eventDay", "Select an item", new { @class="select"})
@Html.EnumDropDownListFor<WeeklyEvent, WeekDay>(x => x.Day, "Select an item" , new { @class="select"})
More examples – Localization support
The resource file keys for the enum values have the following naming convention: {EnumName}.{EnumValue}.
Considering the following resource – type MyResources
:
Using the [LocalizationEnum] attribute
Just set the [LocalizationEnum]
attribute to the enum, specifying the type of the resource object:
[LocalizationEnum(typeof(MyResources))]
public enum WeekDay
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
The usage is the same as the previous examples:
@Html.EnumDropDownList<WeekDay>("selectDay", "")
Specifying the resource object type
If you can’t or don’t want to use the [LocalizationEnum]
attribute, you can specify the resource type using the following helpers:
@Html.EnumDropDownList<WeekDay, MyResources>("selectDay", "")
@Html.EnumDropDownListFor<WeeklyEvent, WeekDay, MyResources>(x => x.Day, "", new {id = "myEventDay"})
References
My name is Rui Jarimba and I was born in Madeira island, Portugal and I currently live in Rome, Italy.
I have more than 10 years of experience developing software using the .NET Framework and other technologies (Web development, Databases, ...).
Some of my professional interests are: software development best practices, software architecture, cloud computing, Continuous Integration (CI), Continuous Delivery (CD) and agile methodologies such as Scrum, Kanban, Lean and any other methodology that can help me to become a better and more productive software engineer.
I believe in good code - code that is readable, maintainable, reusable, testable and deployable. This means that I'm not the "quick and dirty" type, I write code for the medium/long term whenever possible.
Something else about me - I love music, I am an amateur photographer, not a big fan of gyms (I prefer to do some outdoor activity such as walking/hiking), big foodie (I love Mediterranean cuisine and my glass of wine!).