我开始为下面列出的父模型创建我的控制器。我正在为我的所有视图使用视图模型,但在我开始为创建(发布)操作添加逻辑之前,我只是点击了提交,因为它认为我的视图模型不会映射到我的模型。
令我惊讶的是,它确实有效。我正在使用 AutoMapper 并已将子模型的所有映射设置到其相应模型,但未设置父模型(在发布结果中不存在)。MVC 允许这种魔法发生的原因是什么?
模型:
public partial class ParentModel
{
public int Id { get; set; }
public int Child1Id { get; set; }
public int Child2Id { get; set; }
public int Child3Id { get; set; }
public int Child4Id { get; set; }
//other data
public virtual Child1 Child1 { get; set; }
public virtual Child2 Child2 { get; set; }
public virtual Child3 Child3 { get; set; }
public virtual Child4 Child4 { get; set; }
}
查看型号:
public class ParentCreateViewModel
{
//other data
public Child1ViewModel Child1 { get; set; }
public Child2ViewModel Child2 { get; set; }
public Child3ViewModel Child3 { get; set; }
public Child4ViewModel Child4 { get; set; }
}
查看(创建.cshtml):
@model Project.ViewModels.ParentCreateViewModel
@*EditorTemplates and such*@
控制器(获取):
public ActionResult Create()
{
//some list logic
return View();
}
控制器(发布 - 我尚未将其更改为 ParentCreateViewModel 或将其自动映射回 ParentModel):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ParentModel parentModel)
{
if (ModelState.IsValid)
{
db.ParentModels.Add(parentModel);
db.SaveChanges();
return RedirectToAction("Index");
}
//some list logic
return View(parentModel);
}
我的父模型和所有子模型都正确地保存到数据库中。MVC 会做某种幕后绑定吗?它不应该期待一个 ParentCreateViewModel 吗?