2011-12-16 57 views
14

私はMVC3サイトを持っています。このサイトには、デフォルトのモデルバインディングでは動作しないモデルがあります。コードサンプルをオンラインで見てきましたが、IModelBinderを実装するか、DefaultModelBinderから継承するカスタムモデルバインダーを作成できるようです。誰かが各アプローチの賛否両論を説明できるか、おそらくは、あるアプローチが他のアプローチよりもむしろ使用される場合の例を説明できますか?IModelBinderとDefaultModelBinderを使用する場合

ありがとうございます。

+0

あなたはすでにそれを見ている可能性がありますが、ここにいくつかの良い参照があります:http://stackoverflow.com/questions/1550520/best-practices-when-implementing-imodelbinder – Shawn

答えて

9

2つのアプローチは実際には同じものです:DefaultModelbinderはIModelBinderを実装しているため、IModelBinderを継承することは、IModelBinderを実装するのに適した方法です。

DefaultModelBinderから継承するためのPro:多くの動作をDefaultModelBinderから再利用し、必要なものだけを上書きできます。最初から実装する必要はありません。

IModelBinderを独自に実装するためのプロ:実装する方法が1つしかなく(IModelBinder.BindModel)、実装が何をしているかを完全に制御できます。

正しい方法は、あなたのカスタムバインダーから必要なものに大きく依存しますが、通常はDefaultModelBinderの動作が必要です(ほとんどの場合、通常の古いDefaultModelBinderは本当に必要なバインダーです)。

+0

あなたが言ったことに基づいて、 MVCのデフォルトバインディングが機能しない3つのプロパティがある場合、DefaultModelBinderから継承し、そのモデルの大半をバインドしてから、3つの固有プロパティのバインドを処理する必要があります。 –

+1

それは考えです。私はあなたのモデルについてもっと精密にすることなく、より正確にすることはできません。 DefaultModelBindelは多くのことを行うので、それを利用しないのは残念です。 – Falanwe

+0

Dictionary 型のプロパティをバインドします。デフォルトは機能しますが、必要な方法では機能しません。これらのプロパティからビューを構築するためにカスタムヘルパーを使用しています。バインディングは、私がその側で行ったことと連携する必要があります。 –

関連する問題