2009-09-28 6 views
19

제네릭 형식의 모델 바인더를 만들 수 있습니까? 예를 들어, 유형이있는 경우일반 형식의 ASP.NET MVC 모델 바인더

모든 유형의 MyType에서 사용할 수있는 사용자 정의 모델 바인더를 만드는 방법이 있습니까?

감사합니다, 나단

답변

25

, BindModel를 오버라이드 (override), ModelBinder를 만들기 유형을 확인하고

public class MyModelBinder 
    : DefaultModelBinder { 

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { 

     if (HasGenericTypeBase(bindingContext.ModelType, typeof(MyType<>)) { 
      // do your thing 
     } 
     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

은 Global.asax에의 기본에 모델 바인더를 설정해야 할 일을

protected void Application_Start() { 

     // Model Binder for My Type 
     ModelBinders.Binders.DefaultBinder = new MyModelBinder(); 
    } 

일치하는 일반베이스가 있는지 확인

이 질문은 여전히 ​​구글의 결과에 꽤 높은 순위부터
+16

, 나는 MVC3 함께왔다 아마도 더 나은 솔루션 [모델 바인더 공급자 (http://bradwilson.typepad.com/를 사용하는 것입니다 언급하고 싶습니다 blog/2010/10/service-location-pt9-model-binders.html). 이렇게하면 _particular_ 유형 바인딩을위한 특별한 규칙을 추가하려는 경우 기본 바인더를 바꿀 필요가 없으므로 사용자 정의 모델 바인딩을 훨씬 확장 성있게 만듭니다. –

+0

mvc 2 응용 프로그램에서 모든 유형의 사용자 정의 모델 바인더를 설정하는 방법을 찾기 위해 고심하고있었습니다. 그리고 여기에 해결책이 있습니다! 고마워요! – blazkovicz