하위 뷰 모델의 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 - 어떤 방식 으로든 색인이 생성되지 않았습니다. 예상 한 것입니다.