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

本文关键字:模型 操作 类型 视图 提交 | 更新日期: 2023-09-27 18:31:30

我有两个模型:

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的下拉列表(先生,小姐夫人等)

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

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

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

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

Person.Name=Matthew&Person.Title=Mr.

我需要以下内容的地方(使模型绑定正常工作):

姓名=马修&头衔=先生

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

可以在

操作方法中使用 BindAttributePrefix 属性

public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model)
{
}

这实质上是在绑定时从属性名称中删除Person前缀