【发布时间】:2009-10-23 16:06:07
【问题描述】:
我想知道是否有办法将表单值绑定到具有与类属性不同的 Id 的控制器中。
表单以 Person 作为参数发布到控制器,该参数具有属性 Name,但实际表单文本框的 ID 为 PersonName 而不是 Name。
如何正确绑定?
【问题讨论】:
标签: asp.net-mvc binding
我想知道是否有办法将表单值绑定到具有与类属性不同的 Id 的控制器中。
表单以 Person 作为参数发布到控制器,该参数具有属性 Name,但实际表单文本框的 ID 为 PersonName 而不是 Name。
如何正确绑定?
【问题讨论】:
标签: asp.net-mvc binding
不必为此烦恼,只需编写一个 PersonViewModel 类,它反映了与您的表单完全相同的结构。然后使用AutoMapper 将其转换为Person。
public class PersonViewModel
{
// Instead of using a static constructor
// a better place to configure mappings
// would be Application_Start in global.asax
static PersonViewModel()
{
Mapper.CreateMap<PersonViewModel, Person>()
.ForMember(
dest => dest.Name,
opt => opt.MapFrom(src => src.PersonName));
}
public string PersonName { get; set; }
}
public ActionResult Index(PersonViewModel personViewModel)
{
Person person = Mapper.Map<PersonViewModel, Person>(personViewModel);
// Do something ...
return View();
}
【讨论】:
您可以为该模型拥有自己的自定义模型绑定器。
public class PersonBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext) {
return new Person { Name =
controllerContext.HttpContext.Request.Form["PersonName"] };
}
}
还有你的行动:
public ActionResult myAction([ModelBinder(typeof(PersonBinder))]Person m) {
return View();
}
【讨论】: