클래스 속성과 다른 ID를 가진 컨트롤러에 전달 된 양식 값을 바인딩하는 방법이 있는지 궁금합니다.다른 이름의 속성에 바인드 폼의 값을 ASP.NET MVC
양식은 이름이 있지만 실제 양식 텍스트 상자의 이름이 Person 인 매개 변수로 컨트롤러에 게시되며 이름 대신 이름이 있습니다.
어떻게 올바르게 바인딩 할 수 있습니까?
클래스 속성과 다른 ID를 가진 컨트롤러에 전달 된 양식 값을 바인딩하는 방법이 있는지 궁금합니다.다른 이름의 속성에 바인드 폼의 값을 ASP.NET MVC
양식은 이름이 있지만 실제 양식 텍스트 상자의 이름이 Person 인 매개 변수로 컨트롤러에 게시되며 이름 대신 이름이 있습니다.
어떻게 올바르게 바인딩 할 수 있습니까?
귀찮게하지 말고 양식과 완전히 동일한 구조를 반영하는 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();
}