使用自定义的模型绑定为一个控制器动作

问题描述:

我有一个控制器的动作看起来的参数,如:使用自定义的模型绑定为一个控制器动作

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

我希望能够使用自定义的模型绑定的创建的ID从阵列客户端上的复选框列表。有没有一种方法可以绑定到这个参数?另外,有没有一种方法让模型联编程序发现正在使用的参数的名称?例如,在我的模型绑定器中,我很想知道参数的名称是“someIdNumbers”。

要发现你可以使用ModelBindingContext.ModelName财产

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

这种方法对于重复使用多个不同参数的相同绑定程序非常方便。 – jonnybot 2015-08-06 15:12:14

ModelBinder属性可以被应用到操作方法的各个参数的参数的名称:

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

在这里,使用ContactBinder绑定参数contact