2010-03-26 82 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操作的参数。