2

私のクラス図:

BaseContentClass

  • ページはBaseContentClassを継承します
  • タブはBaseContentClassを継承します
  • ..。

私がこれをするなら

ModelBinders.Binders.Add(typeof(BaseContentObject), new BaseContentObjectCommonPropertiesBinder());

次に、タイプTabのコントローラーアクションパラメーターが表示された場合、カスタムモデルバインダーは起動されません。

これを行うと解雇されます:

ModelBinders.Binders.Add(typeof(Tab), new BaseContentObjectCommonPropertiesBinder());

しかし、すべての派生クラスをカスタムモデルバインダーに関連付けるために、global.asax.csに「n」個のAddステートメントを記述したくありませんか?他に選択肢があるかどうかわかりません。

4

2 に答える 2

2

代わりにこれを試してください。私はそれをテストしていませんが、私はそれがうまくいくとかなり確信しています。

[ModelBinder(typeof(BaseContentObjectCommonPropertiesBinder))]
public class BaseContentObject {}
于 2010-04-06T16:05:09.967 に答える
2

ModelBinders.Bindersプロパティは、タイプをキーとして使用するタイプModelBinderDictionaryです。その結果、基本クラスのモデルバインダーの登録は無視されます。Los Techiesのこの記事を読むと、タイプにバインダー属性を定義することでこれを回避できる可能性があると思います。記事の順序の優先順位を参照してください。

于 2010-04-06T15:23:38.337 に答える