[英]MVC4 Automatically mapped my view model?
我开始为下面列出的父模型创建我的控制器。 我正在为我的所有视图使用视图模型,但在我开始为Create(Post)动作添加逻辑之前,我只是点击提交,因为它认为我的viewmodel不会映射到我的模型。
令我惊讶的是它确实奏效了。 我正在使用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; }
}
查看(Create.cshtml):
@model Project.ViewModels.ParentCreateViewModel
@*EditorTemplates and such*@
控制器(获取):
public ActionResult Create()
{
//some list logic
return View();
}
控制器(发布 - 我还没有将它更改为ParentCreateViewModel或AutoMapped它回到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吗?
默认模型绑定器绑定元素名称。 由于两个模型都将共享这些属性(因此,在使用编辑器模板和HTML帮助程序时,HTML元素名称),它将绑定到模型。
你的两个模型都会生成这样的表单元素:
<input type="text" name="Child1_Name" />
..等等。 发布表单值时,模型绑定器会检查并找到“Child1_Name”。 下划线表示子类属性。 因此,选择哪个模型并不重要,因为Child1.Name
是两个模型的有效属性。 因此,由于您已经告诉了您想要ParentModel
的action方法,因此模型绑定器会在找到它时将值应用于Child1.Name
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.