ASP.NET MVC3中奇怪的数据绑定行为?

我有以下域对象:

public class Foo  
{  
    public Id {get; set;}   
    **public BarId {get; set;}**   
    public virtual Bar {get; set;}  
    public string Name {get; set;}  
}  
public class Bar  
{
    public Id {get; set;}     
    public string Name {get; set;}  
}

视图使用的视图模型如下所示:

public class FooEditorModel  
{  
   public Foo {set; get;}
   public SelectList Bars { get; set; }
}  

该视图看起来像这样:

@model FooEditorModel  
@Html.ValidationSummary( true )  
@Html.HiddenFor( model => model.Foo.Id )  
@Html.LabelFor( model => model.Foo.BarId, "Bar" )  
@Html.DropDownListFor( model => model.Foo.BarId, Model.Bars )  
@Html.ValidationMessageFor( model => model.Foo.BarId )

控制器看起来像这样:

[HttpPost]  
public virtual ActionResult Save( FooEditorModel model )
{  
    if ( ModelState.IsValid )
    {
        Foo foo = MakeAModel( model );
        FooRepository.Save( foo );
    }
}  

Foo MakeAModel( model )
{
   Foo foo = MakeAFoo();
   **foo.BarId = model.Foo.BarId;**
   return foo;
}

相当标准的代码,有点简化。
问题是,如果我在Foo中使用Bar而不是BarId ,则ModelState无效(因为Bar.Name)。
我发现它设计得很差,不得不同时拥有一个子Id和一个对根对象中的孩子的引用。

这是数据绑定在MS MVC 3中工作的唯一方法吗?

链接地址: http://www.djcxy.com/p/60447.html

上一篇: Weird data binding behavior in ASP.NET MVC3?

下一篇: Updating only part of a model