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

Mat*_*hew 1 .net c# asp.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; }         
}
Run Code Online (Sandbox Code Playgroud)

表格中有两个字段,第一个字段是Name,第二个字段是下拉列表Titles(Mr.,Mrs. Miss.等)

此页面的视图是强类型的DetailViewModel,并且Save控制器中的方法接受类型的参数PersonViewModel.

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

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

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

Person.Name =马修&Person.Title =先生.

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

名称=马修&标题=先生.

小智 5

您可以使用action方法中的Prefix属性BindAttribute

public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model)
{
}
Run Code Online (Sandbox Code Playgroud)

这实际上Person在绑定时从属性名称中去除了前缀