16

고유 한 바인딩 시나리오를 위해 사용자 정의 모델 바인더를 빌드하는 몇 가지 예제를 찾으려고합니다. 그러나 이전에 발견 한 모든 기사는 더 이상 MVC2와 관련이 없습니다. DefaultModelBinder 소스 코드를 참조하여 내가해야 할 일에 대해 일반적인 느낌을 갖도록 시도했지만, 내 시나리오보다 훨씬 복잡하고 구현해야하는 특정 로직을 분리하는 데 문제가 있습니다.ASP.NET MVC2 - 사용자 정의 모델 바인더 예제

내 목표는 Checkbox/Textbox 쌍의 컬렉션을 가져와 모든 Checked 쌍에 대해 Checkbox 값과 관련 Textbox 값의 키/값 쌍을 만들고 싶습니다. 이 데이터를 집계 한 후에는 컬렉션에서 문자열 직렬화를 수행하여 원하는 Model 유형의 문자열 속성에 저장할 수 있습니다. 나는 이미 주어진 체크 박스를 특정 텍스트 박스와 관련시킬 수있는 관리 가능한 형식으로 양식에서 전송되는 데이터를 필요로하는 모든 조각을 얻는 방법을 찾는 문제 일뿐입니다.

누구나 나에게 맞춤형 모델 바인더를 만들기 시작할 수있는 최신 튜토리얼을 알고 있습니까?

답변

12

MVC 1 이후로 커스텀 모델 바인더에 대해 많은 변화가 있었다고 나는 생각하지 않습니다. 그러나 당신이하려는 일을 이해한다면 그것은 아주 쉬워야합니다.

public class CustomModelBinder : DefaultModelBinder { 
    public override object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) { 

     NameValueCollection form = controllerContext.HttpContext.Request.Form; 
     //get what you need from the form collection 

     //creata your model 
     SomeModel myModel = new SomeMode(); 
     myModel.Property = "value"; 
     //or add some model errors if you need to 
     ModelStateDictionary mState = bindingContext.ModelState; 
     mState.Add("Property", new ModelState { }); 
     mState.AddModelError("Property", "There's an error."); 

     return myModel; //return your model 
    } 
} 

그리고 당신의 행동은 :

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){ 
    //... 
} 

는 정보의 종류는 당신이 찾고있는이 되었습니까?

+2

이 기술은 완전히 작동하지만 테스트하기 쉽도록 HttpContext에 직접 액세스하지 않고'bindingContext.ValueProvider'를 사용해야한다는 인상하에있었습니다. –

+0

@ Nathan Taylor, 알겠습니다. 이 경우 여기에 설명 된 기술로 시작할 수 있습니다. http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx S. Hanselman도 바인더 테스트 방법에 대한 예제를 제공합니다. http://stackoverflow.com/questions/253574/how-to-test-custom -model-binders-in-asp-net-mvc/589250 # 589250 –

+0

또한 특정 (또는 일반) 유형을 기반으로 모델 바인딩을 수행하려는 경우 여기에서 게시물을 확인하십시오. http://stackoverflow.com/questions/1487005/asp-net-mvc-model-binder-generic-type- –

1

내 블로그에서 Custom MVC Model binders의 몇 가지 예를 살펴보십시오.

+1

외부 사이트가 아닌 웹 사이트가 다운되고 여기에 예제가 게시되어야합니다. –