2009-09-28 9 views
19

ジェネリックタイプのモデルバインダーを作成することはできますか?たとえば、タイプがある場合汎用タイプのASP.NET MVCモデルバインダー

public class MyType<T> 

任意のタイプのMyTypeで動作するカスタムモデルバインダーを作成する方法はありますか?

おかげで、 ネイサン

答えて

25

は、modelbinderを作成BindModelをオーバーライドし、種類を確認し、

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

この質問はまだGoogleの検索結果ではかなり高いので、MVC3で提供される優れたソリューションは、[モデルバインダープロバイダ](http://bradwilson.typepad.com/)を使用することです。 blog/2010/10/service-location-pt9-model-binders.html)。これにより、_particular_型をバインドするための特別なルールを追加しようとしている場合に、デフォルトのバインダを置き換える必要がなくなり、カスタムモデルのバインディングがはるかにスケーラブルになります。 –

+0

私は、mvc 2アプリケーションですべてのタイプのカスタムモデルバインダーを設定する方法を見つけるのに苦労していました。そして、ここに解決策があります!どうもありがとう! – blazkovicz

関連する問題