[ASP.NET MVC] Soporte para enumeraciones en ASP.NET MVC 5.1

Posted on Actualizado enn


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";
}

<h2>Create</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Client</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name)
                @Html.ValidationMessageFor(model => model.Name)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ClientType, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EnumDropDownListFor(model => model.ClientType)
                @Html.ValidationMessageFor(model => model.ClientType)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

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!

2 comentarios sobre “[ASP.NET MVC] Soporte para enumeraciones en ASP.NET MVC 5.1

    Carlos Orellana escribió:
    12/21/2013 en 20:40

    Muy bueno.

      Julio Avellaneda respondido:
      12/22/2013 en 09:42

      Gracias Carlos, espero que todo lo nuevo que viene con MVC sea super, saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s