Ras*_*mus 9 asp.net-mvc model-binding asp.net-mvc-3
正如我从下面的问题中理解的那样,应该可以为Get和Post操作使用不同的模型.但不知何故,我未能实现这一目标.
我错过了什么?
相关问题:在控制器操作中使用两个不同的模型进行POST和GET
模型
public class GetModel
{
public string FullName;
public string Name;
public int Id;
}
public class PostModel
{
public string Name;
public int Id;
}
Run Code Online (Sandbox Code Playgroud)
调节器
public class HomeController : Controller
{
public ActionResult Edit()
{
return View(new GetModel {Id = 12, Name = "Olson", FullName = "Peggy Olson"});
}
[HttpPost]
public ActionResult Edit(PostModel postModel)
{
if(postModel.Name == null)
throw new Exception("PostModel was not filled correct");
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
视图
@model MvcApplication1.Models.GetModel
@using (Html.BeginForm()) {
@Html.EditorFor(x => x.Id)
@Html.EditorFor(x=>x.Name)
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
Tra*_*x72 10
您的模型没有使用正确的访问器,因此模型绑定不起作用.将它们更改为此,它应该工作:
public class GetModel
{
public string FullName { get; set; }
public string Name { get; set; }
public int Id { get; set; }
}
public class PostModel
{
public string Name { get; set; }
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
GET和POST控制器操作可以轻松使用他们需要的任何类型.实际上我们不是在谈论模型.Model是一组表示某些应用程序状态/数据的类/类型.因此应用程序或数据模型.
我们在这里处理的是:
所以你的应用程序模型仍然是一样的.而GetModel与PostModel在这个模型中只有两个类/类型.他们不是模特本身.
在您的情况下,您正在使用视图模型类型GetModel,然后将其数据传递给PostModel操作参数.由于这两个类/类型都具有相同匹配名称的属性,因此默认模型绑定器将能够填充PostModel属性.如果属性名称不相同,则必须更改视图以重命名输入以反映POST操作类型属性名称.
您也可以使用GetModel类型的视图,然后使用以下几个不同的参数发布操作:
public ActionResult Edit(Person person, IList<Address> addresses)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或其他任何东西.您只需要确保后期数据可以绑定到这些参数及其类型属性...
| 归档时间: |
|
| 查看次数: |
6364 次 |
| 最近记录: |