簡體   English   中英

MVC4自動映射我的視圖模型?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM