我有以下域对象:
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中工作的唯一方法吗?