【发布时间】:2016-04-06 08:19:52
【问题描述】:
是否可以通过 Http-POST 从强类型视图向控制器发送不等于原始模型类型的对象。
例如:
我有一个这样的 ViewModel:
public class PersonsViewModel
{
List<PersonViewModel> persons { get; set; }
PersonsViewModel() { }
}
public class PersonViewModel
{
//some properties
Person() { }
}
现在我有了这个视图:
@model PersonsViewModel
<div>
@for(int i = 0; i > Model.persons.Count; i++)
{
@Html.EditorFor(Model.persons[i])
}
</div>
编辑器可能如下所示:
@model PersonViewModel
<div>
@using (Html.Beginform("Postaction","Controller", FormMethod.Post)){
<div>
<!-- properties and textboxes here + submit button -->
</div>
}
<div>
控制器动作
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Postaction(PersonViewModel model)
{
//do something
}
}
这不起作用,因为控制器似乎需要一个 PersonsViewModel 对象。到目前为止,我的解决方法是制作一个包含所有 PersonViewModel 的“大”表单并将完整的 PersonsViewModel 发送到控制器。
尽管视图是强类型的,但是否有可能只将一个 PersonViewModel 传递给控制器?
亲切的问候, 马丁
【问题讨论】:
-
对于第一个问题,简短的回答是 NO(默认情况下在 MVC 中)。 ModelBinder 将您传递的字段名称与您在操作中声明的类型进行匹配。你应该看看自定义模型绑定器:codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder
-
一般情况下,您会将 PersonViewModel 的 ID 发送到 Controller,然后它会在其中查询数据源以检索数据对象。
标签: c# asp.net asp.net-mvc asp.net-mvc-5