3

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 Name.

How can I bind this correctly?

2 Answers 2

3

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();
}
Sign up to request clarification or add additional context in comments.

Comments

2

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();
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.