Привязка модели к одному параметру в действии

#asp.net-mvc #model-binding

#asp.net-mvc #привязка модели

Вопрос:

Из-за некоторого отклонения я хочу использовать MVC ModelBinders для привязки запроса к объекту с именем и типом, которые известны только во время выполнения.

например

 public ActionResult BindSomething()
{
    Type type  = typeof(Some.Type);
    string parameterName = "someParameter"; //this corresponds to a particular form input name

    var binder = Binders.GetBinder(desiredType, true);
    var x = binder.BindModel(this.ControllerContext, ???) //??? should be a ModelBindingContext. Where can I get this from 
    return View(x);
}
  

Я думаю, мне нужно получить доступ к ModelBindingContext или создать новый, действительный, но как мне это сделать?

редактировать: извиняюсь, если я был недостаточно ясен — я уже знаю о TryUpdateModel , но, насколько я понимаю, это связывает ВСЕ опубликованные значения со свойствами объекта модели, который вы передаете. Я просто хочу получить соответствующий объект для одного опубликованного параметра.

Ответ №1:

Вы можете использовать TryUpdateModel как предложил Руан, вы также можете реализовать пользовательскую привязку модели, которая может привязывать правильный тип. Преимущество этого подхода заключается в том, что он позволяет вам работать с интерфейсами или абстрактными моделями и исключает привязку кода к вашим действиям. Это немного аккуратнее, но я бы рекомендовал его только в том случае, если он будет повторно использоваться в других частях вашего кода.

Ответ №2:

Используйте метод контроллера TryUpdateModel

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel.aspx

Он выберет подходящее связующее в соответствии с типом аргумента и выполнит привязку модели для вас.