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