Связывание модели с одним параметром в действии - PullRequest
1 голос
/ 24 октября 2011

Из-за некоторого refect-fu я хочу использовать 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 или создать новый, действительный, но как мне это сделать?

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

Ответы [ 2 ]

1 голос
/ 24 октября 2011

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

0 голосов
/ 24 октября 2011

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

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

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

...