2011-12-17 8 views
0

属性私のアクションは、デフォルトのモデルバインダーにより結合される、クラスのプロパティを取りますASP.Net MVC3 - バインディングカスタムモデル、デフォルトのモデルバインダー、値の型と[必須]

public ActionResult MyControllerAction(MyModelClass model) { ... 

クラスの使用MongoDBのObjectId値型のようないくつかの非標準的な値の型は、もちろんnullではありません。

私は(行うのに十分に簡単)のObjectIdタイプのカスタムモデルバインダーを作成し、そのような中Application_Startにそれを追加した場合:

ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); 

...それは、デフォルトのモデルバインダーによって無視されますアクションに直接引数として渡されたモデル値にのみ適用されるように見えます。

これに加えて、[Required]属性にデフォルト(指定されていない)値が指定されていないと認識されるようです。だから、ナットシェルで

  • は、どのように私は、モデルの性質を解析するために登録したカスタムモデルバインダーを使用するデフォルトのモデルバインダーを得るのですか?
  • [Required]には、そのプロパティのdefaultの値が指定されていないと認識するにはどうすればよいですか?

または、既に私がダウンロードしてプロジェクトで使用できるすべてのものをすでに処理しているものがありますか?

+0

は* *あなたのビューモデルでこれらの派手なタイプを使用しないように単純ではないでしょうか? IMOでは、ビューモデルは非常にシンプルで、より洗練されたタイプへの/からのあらゆる変換がコントローラ内で起こるはずです。 –

+0

確かに、ID値を取るたびにID値を解析して検証するコードスニペットが必要であるという点を除いて、これは私がやっていたことです。私はそれをモデルのバインダーに入れるのが簡単だと考えました。私はちょうど今それを考え出したので、私は投稿し、自分の質問に答えます。 –

答えて

0

[OK]を、すでにそれを考え出し:

  • DefaultModelBinderは、指定した任意のカスタムモデルバインダーを使用しますが、値が実際に送信された値
  • に指定されている場合にのみ[Required]属性は、基本的にはの省略形ですん"nullでない"ので、プロパティがnullableとして指定されている場合、つまり、私のケースでは、ObjectId?は、値が指定されていない場合、属性をトリップします。

ここではこのようなもののいくつかを説明して私が見つけた良いブログ記事です:http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

関連する問題