具有IEnumerable <child>成员的ViewModel未在POST </child>上正确绑定

时间:2011-08-29 00:41:26

标签: asp.net-mvc asp.net-mvc-3

我有一个视图模型,其中包含一个IEnumerable的子视图模型。当我为父级和子级创建编辑表单,然后发布它时,只填充视图模型的父级部分; IEnumerable属性保持为null。

视图模型:

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()
}

正确生成表单。如果我重新编写Edit方法以使用FormCollection,则会正确接收Family和每个Member的值。但是,我更喜欢使用强类型的ViewModel。

一条可能相关的信息:每个子表单控件具有相同的ID;也就是说,每个 MemberViewModel都有<INPUT TYPE="text" ID="m_FirstName"> - 它们没有以任何方式编入索引,这是我所期望的。

1 个答案:

答案 0 :(得分:1)

I asked a similar question。我把我用过的解决方案放在我的问题正文中。我相信它也可能对你有所帮助。通过消除foreach视图元素最终将被绑定回底层视图模型。希望对您有所帮助。