2010-02-19 62 views
2

在ASP.Net MVC模型绑定器中,可以创建绑定类型的对象,然后更新绑定类型的属性。将数据绑定到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()?

+0

什么是用例? – 2010-02-19 17:40:37

+0

我有两个子类和哪一个实例化是基于ID为“someFieldId”的下拉列表。所以我想使用工厂实例化Child类,然后使用TryUpdateModel/BindModel调用更新窗体中的所有父属性。然后我会喜欢传递给控制器​​的绑定模型。 – 2010-02-19 17:49:29

回答

1

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

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

+0

这看起来像一个完美的解决方案。我会试一试并回复你:-) – 2010-02-21 21:35:23

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

这个怎么样?

+0

不幸的是,'BindModel(child)'方法不存在。这是我的示例代码的问题。 :-( – 2010-02-21 21:34:37

0

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

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

相关问题