Странное поведение привязки данных в ASP.NET MVC3? - PullRequest
1 голос
/ 06 июля 2011

У меня есть следующие доменные объекты:

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;
}

Довольно стандартный код, немного упрощенный.
Проблема в том, что если я использую Bar в Foo, вместо BarId , ModelState будет недействительным (из-за Bar.Name).
Я считаю, что он очень плохо спроектирован, чтобы иметь принудительный идентификатор ребенка и ссылку на ребенка в корневом объекте.

Это единственный способ для привязки данных работать в MS MVC 3?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...