2010-09-01 4 views
5

tengo una acción de controlador que se parece a:El uso de un aglutinante de modelo personalizado para un argumento de una acción de controlador

public ActionResult DoSomethingCool(int[] someIdNumbers) 
{ 
    ... 
} 

me gustaría ser capaz de utilizar un modelo personalizado aglutinante de la creación de esa matriz de ID de una lista de casillas de verificación en el cliente. ¿Hay alguna manera de vincularse a ese argumento? Además, ¿hay alguna forma de que un archivador modelo descubra el nombre del argumento que se utiliza? Por ejemplo, en mi carpeta de modelo me encantaría saber que el nombre del argumento era "someIdNumbers".

Respuesta

6

para descubrir el nombre del argumento se puede utilizar la propiedad ModelBindingContext.ModelName

public class MyModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var thisIsTheArgumentName = bindingContext.ModelName; 
    } 
} 
+0

Este enfoque es bastante útil para volver a utilizar el mismo encuadernador para múltiples argumentos diferentes. – jonnybot

11

El atributo ModelBinder se puede aplicar a los parámetros individuales de un método de acción:

public ActionResult Contact([ModelBinder(typeof(ContactBinder))]Contact contact) 

Aquí, el El parámetro contact está enlazado usando ContactBinder.

Cuestiones relacionadas