代码之家  ›  专栏  ›  技术社区  ›  Russell Giddings

将数据绑定到ASP.NET MVC中的现有对象

  •  2
  • Russell Giddings  · 技术社区  · 14 年前

    在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(child)调用的东西,类似于来自控制器的trymodulpdate()?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Robert Harvey    14 年前

    我认为解决您的问题的更好方法是从DefaultModelBinder(我认为您可能是)派生,然后重写CreateModel方法而不是BindModel方法。

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

        2
  •  0
  •   takepara    14 年前
    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);
    }
    

    这个怎么样?

        3
  •  0
  •   Simon Thompson    14 年前

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

    所以您应该能够创建任何一种类型的类并调用updateModel????