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