将模型提交到与视图模型类型不同的操作
本文关键字:模型 操作 类型 视图 提交 | 更新日期: 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.
我需要以下内容的地方(使模型绑定正常工作):
姓名=马修&头衔=先生
可以在
操作方法中使用 BindAttribute
的 Prefix
属性
public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model)
{
}
这实质上是在绑定时从属性名称中删除Person
前缀