Использование пользовательского связывателя модели для аргумента действия контроллера - PullRequest
5 голосов
/ 02 сентября 2010

У меня есть действие контроллера, которое выглядит следующим образом:

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

Я хотел бы иметь возможность использовать привязку пользовательской модели для создания массива идентификаторов из списка флажков на клиенте.Есть ли способ связать только с этим аргументом?Кроме того, существует ли способ для связывателя модели обнаружить имя используемого аргумента?Например, в моем связывателе модели я хотел бы знать, что имя аргумента было «someIdNumbers».

Ответы [ 2 ]

11 голосов
/ 02 сентября 2010

Атрибут ModelBinder может применяться к отдельным параметрам метода действия:

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

Здесь параметр contact привязывается с использованием ContactBinder.

6 голосов
/ 02 сентября 2010

Чтобы узнать имя аргумента, вы можете использовать свойство ModelBindingContext.ModelName

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