2011-08-29 4 views
3

하위 뷰 모델의 IEnumerable을 포함하는 뷰 모델이 있습니다. 상위 및 하위에 대한 편집 양식을 만든 다음 게시하면보기 모델의 상위 부분 만 채워집니다. IEnumerable 속성은 null로 유지됩니다.IEnumerable이있는 ViewModel <child> POST에 올바르게 멤버가 바인딩되지 않았습니다.

보기 모델 :

public class FamilyViewModel 
{ 

    public int idFamily { get; set; } 
    public string FamilyName { get; set; } 
public IEnumerable<MemberViewModel> Members { get; set; } 

} 

public class MemberViewModel 
{ 

    public int idMember { get; set; } 
    public int idFamily { get; set; } 
    public string FirstName { get; set; } 
} 

FamilyController.cs

[HttpGet] 
public ActionResult Edit(int id) 
{ 
    var family = unitOfWork.FamilyRepository.Single(f => f.idFamily == id); 
    FamilyViewModel viewModel = Mapper.Map<family, FamilyViewModel>(family); 
      /* at this point, viewModel.Members is populated correctly */ 
    return View(viewModel); 
} 

[HttpPost] 
public ActionResult Edit(FamilyViewModel viewModel) 
{ 
    /* at this point, viewModel.Members is null */ 
    return View(viewModel); 
} 

Edit.cshtml

:

@model FamilyViewModel 

@using (Html.BeginForm()) 
{ 
@Html.EditorFor(s => Model, "Family") 

@foreach (MemberProfileViewModel m in Model.Members) 
{ 
    @Html.EditorFor(o => m, "Member") 
} 

@Html.Submit() 
} 

형태가 정확하게 생성된다. FormCollection을 사용하도록 Edit 메서드를 다시 작성하면 Family 및 각 멤버의 값이 올바르게 수신됩니다. 그러나 강력하게 형식화 된 ViewModel을 사용하는 것을 선호합니다.

하나의 관련 정보 : 각 하위 양식 컨트롤에 동일한 ID가 있습니다. 즉 에 대해 <INPUT TYPE="text" ID="m_FirstName">이 있습니다. 모두 MemberViewModel - 어떤 방식 으로든 색인이 생성되지 않았습니다. 예상 한 것입니다.

답변

1

I asked a similar question. 나는 내가 사용했던 해결책을 내 질문에 넣었다. 나는 그것이 당신에게도 도움이 될 것이라고 믿습니다. 그것을 제거함으로써 foreach 뷰 요소는 결국 기본 뷰 모델에 다시 바인딩 될 것입니다. 희망이 당신에게 도움이됩니다.

관련 문제