2010-03-26 64 views

回答

8

下面是ScottGu的例子擴展了一下。正如@SLaks解釋的那樣,當收到POST時,MVC將嘗試創建一個新的MyPostName對象,並將其屬性與from字段進行匹配。它還將使用匹配和驗證的結果更新ModelState屬性。

當動作返回視圖時,它也必須爲它提供一個模型。但是,該視圖不必使用相同的模型。事實上,視圖可以使用包含擴展數據的不同模型進行強類型化,例如,它可以將導航屬性綁定到數據庫表中的外鍵;如果是這種情況,則從POST模型映射到視圖模型的邏輯將包含在POST操作中。

public class MyGetModel 
{ 
    string FullName; 
    List<MyGetModel> SuggestedFriends; 
} 

public class MyPostModel 
{ 
    string FirstName; 
    string LastName; 
} 

//GET: /Customer/Create 
public ActionResult Create() 
{ 
    MyGetModel myName = new MyGetModel(); 
    myName.FullName = "John Doe"; // Or fetch it from the DB 
    myName.SuggestedFriends = new List<MyGetModel>; // For example - from people select name where name != myName.FullName 
    Model = myName; 
    return View(); 
} 

//POST: /Customer/Create 
[HttpPost] 
public ActionResult Create(MyPostModel newName) 
{ 
    MyGetModel name = new MyGetModel(); 
    name.FullName = newName.FirstName + "" + newName.LastName; // Or validate and update the DB 
    return View("Create", name); 
} 
+1

Whats'ActionModel'? – Omar 2010-03-26 07:14:55

+0

我的錯誤,應該是ActionResult。 – 2010-03-26 09:16:32

+0

好的,現在有道理。除非通過框架嘗試將輸入映射到Action的參數中列出的模型的屬性,否則操作無需知道發佈給它們的任何類型。 – 2010-03-26 12:41:19

2

POST模型僅用於將數據傳遞到您的操作方法。

POST操作發送到其視圖的模型不需要與它接收到的模型相關(通常不會)。
類似地,初始GET動作(顯示錶單首先)傳遞給其視圖(提交給POST動作)的模型不需要與POST動作需要的模型相關(儘管它通常會是相同的型號)

只要它的屬性與您的輸入參數相匹配,您可以使用您想要的任何模型作爲POST操作的參數。