[英]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.