ASP.NET MVC帖子模型的示例?

时间:2010-03-26 02:51:33

标签: asp.net-mvc viewmodel

我正在观看HaHaa presentation on ASP.NET MVC from MIX并且他们提到使用Post Model,我猜他们说你可以使用仅用于发布的模型。我试过寻找这个例子。我不明白他们在说什么?有没有人有一个如何在强类型视图中工作的示例,其中视图模型和后期模型的类型不同?

2 个答案:

答案 0 :(得分:8)

下面是ScottGu的例子扩展了一下。正如@SLaks所解释的,当收到POST时,MVC将尝试创建一个新的MyPostName对象,并将其属性与from字段匹配。它还将使用匹配和验证的结果更新ModelState属性。

当动作返回视图时,它也必须为它提供模型。但是,视图不必使用相同的模型。实际上,可以使用包含扩展数据的不同模型强类型化视图,例如,它可以将导航属性绑定到DB表中的外部键;如果是这种情况,从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 :(得分:2)

POST模型仅用于将数据传递到您的操作方法。

POST操作发送到其视图的模型不需要与它收到的模型相关(通常也不会)。
类似地,初始GET操作(首先显示表单)传递给其视图(提交到POST操作)的模型不需要与POST操作所采用的模型相关(尽管通常将是相同的模型)

只要它具有与输入参数匹配的属性,您就可以将参数所需的任何模型用于POST操作。