将数据绑定到Asp.net MVC中的现有对象

时间:2010-02-19 17:26:39

标签: c# asp.net-mvc model-view-controller modelbinders

在ASP.Net MVC模型中,可以创建绑定类型的对象,然后更新它的属性。

e.g。

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 个答案:

答案 0 :(得分:2)

我认为对你的问题更好的方法是从DefaultModelBinder(我认为你可能是)派生,然后覆盖CreateModel方法而不是BindModel方法。

通过从中返回您的Child对象,您应该沿着您正在寻找的路径。

答案 1 :(得分:0)

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);
}

这个怎么样?

答案 2 :(得分:0)

绑定器只需要在类属性和字段值中使用相同的名称,调用updatemodel会将任何匹配的值放入模型中。

所以你应该能够创建任何类型的类并调用updatemodel ???