我想知道是否有办法将传递给控制器的表单值绑定到类属性中具有不同的Id。
表单发布到控制器,其中Person作为参数具有属性Name但实际表单文本框的ID为PersonName而不是Name。
如何正确绑定?
答案 0 :(得分:3)
不要为此烦恼,只需编写一个反映与表单完全相同的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();
}
答案 1 :(得分:2)
您可以拥有自己的自定义模型绑定器。
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();
}