Привязка данных к существующему объекту в Asp.net MVC - PullRequest
2 голосов
/ 19 февраля 2010

В связывателе модели ASP.Net MVC можно создать объект связанного типа, а затем обновить его свойства.

, например

public override object BindModel(ControllerContext controllerContext,
    ModelBindingContext bindingContext)
{
    ParentType boundModel = null;
    if (bindingContext.ModelType == typeof(ParentType))
    {
        var myFactory = new MyFactory();
        var someValue = bindingContext.ValueProvider.GetValue
            ("someFieldId").AttemptedValue;
        ChildType child = myFactory.Create(someValue);
        BindModel(child);
        boundModel = child;
    }
    return boundModel;
}

В этом коде я хочу знать, есть ли что-то похожее на вызов BindModel (дочерний), вроде TryModelUpdate () из контроллера?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Я думаю, что лучшим подходом к вашей проблеме было бы извлечь из DefaultModelBinder (который, я думаю, вы, вероятно,), а затем переопределить метод CreateModel, а не метод BindModel.что вы должны идти по пути, который вы ищете.

0 голосов
/ 18 ноября 2010

Для подшивки просто необходимы одинаковые имена в свойствах класса и в значении поля. Вызов updatemodel поместит любые подходящие значения в модель.

Таким образом, вы сможете просто создать любой тип класса и вызвать updatemodel???

0 голосов
/ 21 февраля 2010
public override object BindModel(ControllerContext controllerContext, 
                                 ModelBindingContext bindingContext)
{
    ParentType boundModel = null;
    if (bindingContext.ModelType == typeof(ParentType))
    {
        var myFactory = new MyFactory();
        var someValue = bindingContext.ValueProvider
                                      .GetValue("someFieldId").AttemptedValue;
        ChildType child = myFactory.Create(someValue);
        BindModel(child);
        boundModel = child;
    }

    // change here
    bindingContext.ModelMetadata.Model = boundModel;
    return BindModel(controllerContext, bindingContext);
}

Как насчет этого?

...