Developer's Diary

31 agosto, 2014

Curso – Apuntes de ASP MVC 4 Con Razor (IV) (II) – Custom Model Binders

Filed under: .net, API, ASP.Net, Curso C#, MVC4, Web — Etiquetas: , , , , , , — jnavero @ 2:48 PM

Como comenté en el post anterior: Curso – Apuntes de ASP MVC 4 Con Razor (IV) – Model Binders y Custom Data Anotations

Aquí traigo una pequeña continuación en la que hablaré sobre los Model Binders personalizados en MVC4. Este post será cortito por eso he puesto en el titulo un II para indicar que es una pequeña continuación del anterior.

Custom Model Binders.

Para poder hacer un model Binder personalizado, lo único que debemos hacer es crearnos una clase que implemente la interfaz IModelBinder que se encuentra en el espacio de nombres System.Web.Mvc.

De esta forma podemos redefinir el método BindModel para determinar como gestionar las operaciones del enlace.

La estructura de la función es así:


//Implementamos la interface IModelBinder.
public class ClientModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//Aquí debemos meter el código necesario que se retornará a la vista.
}
}

Este método, dispone de acceso al contexto de ejecución en el parámetro ControllerContext.

Cabe comentar que en muchos lugares es necesario convertir las rutas relativas en absolutas.

El objetivo de esto, es conseguir construir un modelo que se retorne a la vista.

Aquí pongo el ejemplo anterior completo.


//Implementamos la interface IModelBinder.
public class ClientModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string clientName = controllerContext.HttpContext.Request.Form["name"];
string clientAddress = controllerContext.HttpContext.Request.Form["address"];
var client = new Client(){ Name = clientName, Address= clientAddress};
return client;
}
}

Creo que este código es sencillito.

Por ultimo indicar que además, podemos hacer cambios en el Model Binders por defecto sobreescribiendo el método BindProperty funciona de forma muy similar a la vista anteriormente la diferencia se puede ver en este fragmento de código:


public class ClientModelBinder : DefaultModelBinder
{

protected override void BindProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor)
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}

En este ultimo ejemplo debemos cambiar la llamada base.BindProperty por lo que nosotros deseemos.

Hasta el próximo post de Mvc!.

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

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

A %d blogueros les gusta esto: