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