2009-10-23 4 views
3

클래스 속성과 다른 ID를 가진 컨트롤러에 전달 된 양식 값을 바인딩하는 방법이 있는지 궁금합니다.다른 이름의 속성에 바인드 폼의 값을 ASP.NET MVC

양식은 이름이 있지만 실제 양식 텍스트 상자의 이름이 Person 인 매개 변수로 컨트롤러에 게시되며 이름 대신 이름이 있습니다.

어떻게 올바르게 바인딩 할 수 있습니까?

답변

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

해당 모델에 대한 맞춤형 모델 바인더가있을 수 있습니다.

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(); 
} 
관련 문제