MVC 模型绑定父子项(集合)
本文关键字:集合 父子 模型 绑定 MVC | 更新日期: 2023-09-27 18:32:37
我正在尝试将子集合从我的视图模型绑定到控制器中的域模型,但我不知道如何操作。(我尝试使用自动映射器,但没有走得很远)。
我已经掌握了有关我正在处理的内容的所有信息,因此为了保存树木,我认为放置链接可能很容易,而不是重复相同的代码。
MVC 部分视图未从编辑器模板呈现
到目前为止,这就是我在控制器中拥有的内容。我知道我的孩子可能需要在 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);
}
父项已正确插入,但子项(它们是三个)仅插入一个,并且除父 ID 外,值均为空。
您的var child = new Child(){..
代码没有意义。看看你之前的问题,ParentVM
甚至不应该包含Name
、DOB
和Address
的属性。它们似乎是 ChildVM
类的属性,而不是ParentVM
(也许它们是两者的属性,但无法从您的代码中分辨出来),并且在任何情况下您都不会为 ParentVM.Name
、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();
}