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

时间:2011-07-06 18:21:15

标签: asp.net-mvc-3 data-binding

我有以下域对象:

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中工作的唯一方法吗?

0 个答案:

没有答案