Привязать formValue к свойству с другим именем, ASP.NET MVC - PullRequest
3 голосов
/ 23 октября 2009

Мне было интересно, есть ли способ связать значения форм, передаваемые в контроллер, которые имеют идентификаторы, отличные от свойств класса.

Форма отправляет сообщение контроллеру с параметром Person в качестве параметра, имеющего свойство Name, но в текстовом поле формы вместо идентификатора Name вместо идентификатора будет указан идентификатор PersonName.

Как я могу связать это правильно?

Ответы [ 2 ]

3 голосов
/ 23 октября 2009

Не беспокойтесь об этом, просто напишите класс 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();
}
2 голосов
/ 23 октября 2009

Для этой модели у вас может быть собственное связующее для модели.

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...