MVC模型绑定父子(集合)

时间:2014-11-30 23:51:51

标签: c# asp.net-mvc-5 automapper

我正在尝试将来自我的viewmodels的子集合绑定到控制器中的域模型,我不知道如何。 (我尝试使用自动播放器并没有走得太远。)

我已经掌握了有关我正在处理的所有信息,因此为了保存树,我认为可能很容易放置链接,而不是重复相同的代码。

MVC Partial View not rendering from an EditorTemplates

到目前为止,这是我在控制器中的内容。我知道我的孩子可能需要处于for循环中。

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(ParentVM viewModel)
    {
        if (ModelState.IsValid)
        {

            var child = new Child()
            {
                Name = viewModel.Name,
                DOB = viewModel.DOB,
                Address = viewModel.Address
            };

            var parent = new Parent()
            {
                FirstName = viewModel.FirstName,
                LastName = viewModel.LastName
            };

            //Parent parent = new Parent();              
            //var employee = AutoMapper.Mapper.Map<Parent, ParentVM>(parent);

            db.Parents.Add(parent);
            db.Childs.Add(child);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(viewModel);
    }

父插入正确,但子节点(它们是三个)只插入一个,除了parentID之外,值都是null。

1 个答案:

答案 0 :(得分:0)

var child = new Child(){..的代码没有意义。查看上一个问题,ParentVM甚至不应包含NameDOBAddress的属性。它们似乎是ChildVM类的属性,而不是ParentVM(也许它们是两者的属性,但可以从您的代码中告知),并且无论如何您都不会为ParentVM.Name提供任何控件{1}},ParentVM.DOB等等,因此当您回发时它们将始终为null(因此当您保存到数据库时为null)。

有点不清楚你想要做什么,但如果你正确使用了EditorTemplate ChildVM,那么你可以使用

创建一个Child
if (ModelState.IsValid)
{
  ....
  // assumes your using a view model named ChildVM and property Childs is typeof List<ChildVM>
  foreach(ChildVM item in viewmodel.Childs) 
  {
    // Create a new Child based on ChildVM
    var child = new Child()
    {
      Name = item.Name,
      DOB = item.DOB,
      Address = item.Address
    };
    db.Childs.Add(child);
  }
  ....
  db.SaveChanges();
}