#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
Он выберет подходящее связующее в соответствии с типом аргумента и выполнит привязку модели для вас.