将模型提交到与视图模型类型不同的操作

时间:2014-11-21 21:20:07

标签: c# asp.net .net asp.net-mvc asp.net-mvc-5

我有两种模式:

public class PersonViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
}

public class DetailViewModel
{
     public IEnumerable<string> Titles { get; set; }
     public PersonViewModel Person { get; set; }         
}

表单显示两个字段,第一个字段是Name,第二个字段是Titles的下拉列表(Mr.,Mrs. Miss。等)

此页面的视图强烈输入DetailViewModel,控制器中的Save方法接受PersonViewModel类型的参数。

由于视图强烈类型为与表单操作的参数类型不同的类型,因此HttpRequest中的名称与MVC在操作中的期望值不匹配。

是否可以让MVC正确绑定模型不匹配而不必必须手动指定表单字段名称? (例如,我仍然想使用@Html.TextBoxFor(m => m.Person.Name)

为了澄清,提交的表单字段名称类似于以下内容:

  

Person.Name =马修&安培; Person.Title =先生

我需要以下内容(模型绑定工作):

  

名称=马修&安培;名称=先生

1 个答案:

答案 0 :(得分:5)

您可以在操作方法

中使用Prefix的{​​{1}}属性
BindAttribute

这实际上在绑定时从属性名称中删除了public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model) { } 前缀