Hola a todos, uno de las características que le hacia falta a ASP.NET MVC era el soporte nativo para trabajar con enumeraciones, sin embargo ya en la versión 5.1 (ojo que todavía es RC) ya se dispone de un helper dedicado para trabajar con enumeraciones, así que vamos a verlo (Revisa más características en este link).

Lo primero que debes hacer es descargar e instalar el update Visual Studio 2013 Update 1 RC, una vez instalado creamos un nuevo proyecto y añadimos el paquete Microsoft ASP.NET MVC, como todavía no es oficial asegúrate de seleccionar Include Prerelease:

enums

O bien por el Package Manager Console con: Install-Package Microsoft.AspNet.Mvc -Version 5.1.0-rc1 –Pre

Ahora, vamos a crear una enumeración que va a manejar los tipos de clientes:

public enum ClientType { Free = 0, VIP = 1, Gold = 2, Platinum = 3 }

Y un modelo:

public class Client { public int ClientId { get; set; } public string Name { get; set; } public ClientType ClientType { get; set; } }

Ahora creamos un controlador, para el ejemplo solo voy a crear las acciones para crear (no te fijes si crea o no, porque no lo hace):

public class ClientController : Controller { // GET: /Client/Create public ActionResult Create() { return View(); } // POST: /Client/Create [HttpPost] public ActionResult Create(Client client) { ViewBag.type = client.ClientType; return View(); } }

Y finalmente la vista:

@model Enums.Models.Client @{ ViewBag.Title = "Create"; }

Create

@using (Html.BeginForm()) { @Html.AntiForgeryToken()

Client


@Html.ValidationSummary(true)
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name)
@Html.LabelFor(model => model.ClientType, new { @class = "control-label col-md-2" })
@Html.EnumDropDownListFor(model => model.ClientType) @Html.ValidationMessageFor(model => model.ClientType)
}

Ahora al probar la aplicación, se genera correctamente una lista con las opciones de la enumeración:

client

Y si damos click en Create y revisamos lo que pasa en la acción Create, observamos que el valor seleccionado se mapea correctamente con la propiedad del modelo:

modelo

Espero el post les sea interesante, saludos!