BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

ASP.NET MVCモデルバインディング

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2012年2月16日. 推定読書時間: 2 分 |

原文(投稿日:2012/02/13)へのリンク

モデルバインディングは、厳密に型付けされたオブジェクトを作成するためにリクエストデータを使うことにより、コントローラのアクションを単純化する機能である。Jess Chadwick氏はMSDNの記事で、複雑なシナリオだけじゃなく、デフォルトのモデルバインダーが十分じゃないときに、カスタムモデルバインダーを作成するようにこの機能を掘り下げた。

ASP.NET MVCモデルバインディングとはなにか?これは以下のように有効化できる。 - 

public ActionResult Create()
{

var product = new Product() {

AvailabilityDate = DateTime.Parse(Request["availabilityDate"]),
CategoryId = Int32.Parse(Request["categoryId"]),
Description = Request["description"],
Kind = (ProductKind)Enum.Parse(typeof(ProductKind),
Request["kind"]),
Name = Request["name"],
UnitPrice = Decimal.Parse(Request["unitPrice"]),
UnitsInStock = Int32.Parse(Request["unitsInStock"])

}

};

to be replaced with this - 

public ActionResult Create(Product product)
{
// ...
}

ASP.NETは、クエリーストリングのパラメータ名と厳密に型付けされたオブジェクトのプロパティ名を自動的にマップする。これは、JSONでポストされた値もサポートしている。モデルバインディングは、 (コレクションのアイテムの特定にインデクサを使う)シンタックスに注意する必要はあるが、コレクションやネストされたオブジェクトのような高度なケースでも動作する。

モデルバインディングフレームワークを拡張したい場合、いくつかのケースでカスタムモデルバインダーを作成することができる。一般的な例としては、(バインダーがリクエストデータによって実行時に特定の実装を選択する必要がある場合など)ビジネスモデルとの厳密な連携が必要なインターフェイスや抽象クラスにバインドするときがあげられる。Jess氏の記事では、DefaultBindingProviderを継承して、必要に応じてビヘイビアをオーバーライドするだけで実現できることを示している。たとえば、カスタムモデルバインダーの単体テストをする方法は、Scott Hanselmann氏の記事であるDateTimeの分割 - ASP.NET MVCモデルバインダーの単体テストを参照して欲しい。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT