I was wondering if there was a way to bind form values passed into a controller that have different Id's from the class properties.
The form posts to a controller with Person as a parameter that has a property Name but the actual form textbox has the id of PersonName instead of Na开发者_如何学JAVAme.
How can I bind this correctly?
Don't bother with this, just write a PersonViewModel
class that reflects the exact same structure as your form. Then use AutoMapper to convert it to 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();
}
You could have your own custom model binder for that model.
public class PersonBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext) {
return new Person { Name =
controllerContext.HttpContext.Request.Form["PersonName"] };
}
}
And your action :
public ActionResult myAction([ModelBinder(typeof(PersonBinder))]Person m) {
return View();
}
精彩评论