我有两种模式:
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 =先生
我需要以下内容(模型绑定工作):
名称=马修&安培;名称=先生
。
答案 0 :(得分:5)
您可以在操作方法
中使用Prefix
的{{1}}属性
BindAttribute
这实际上在绑定时从属性名称中删除了public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model)
{
}
前缀