本稿は、Scott Guthrie氏のブログを、氏の許可を得て、翻訳、転載したものです。米Microsoft社の副社長で、ASP.NETやSilverlightの開発チームを統率する氏のブログでは、次期製品を含む最新の技術をいち早く紹介しています。
ASP.NET MVC 3: Razorの@model新キーワード
2週間前、ASP.NET MVC 3ベータ版リリースを出荷しました。これは『go live』デプロイメントをサポートし、多くの改善点も提供します。ベータ版の告知投稿で、ASP.NET MVC 3の新機能の概要が確認できます。また、初回のプレビュー版リリースで出現した他のASP.NET MVC 3機能については、最初のASP.NET MVC 3プレビュー版投稿で確認してください。
この投稿は、 ASP.NET MVC 3ベータ版の新機能をいくつか詳細に紹介していく『ミニ投稿』で、最初の投稿になります。本日の投稿では、新しいRazorビューエンジンでサポートされるようになった@model新ディレクティブについて話します(これによりビューファイルがより簡潔でクリーンになります)。
Razorの基礎
ASP.NET MVC 3は、『Razor』と呼ばれる新しいビューエンジンオプションとともに出荷されます(既存の.aspxビューエンジンは継続してサポート/改善されます)。
Razorの紹介というブログ投稿で、Razorを導入した理由やその文法などの詳細を確認できます。もしまだその投稿を読んでいない場合は、ちょっと読んでみてください(ここからはそれを読んでいることを前提にしているためです)。
Razorの紹介投稿を読まれたら、ASP.NET MVC 3プレビュー版投稿も読んで、そこにあるASP.NET MVC 3 Razorのサンプルを確認してください。
@model新ディレクティブ
では、ASP.NET MVC 3ベータ版に追加された@modelディレクティブという新機能を見てみましょう。@modellディレクティブはビューファイルから強く型付けされたモデルを参照するのによりクリーンで簡潔な方法を提供します。
実際の動きを確認するために、データベースから製品のカテゴリーを一覧する/ProductsというURLを実装する(超)シンプルなシナリオを見てみましょう。
以下は/ProductsというURLを実装するシンプルなProductsControllerの実装です。データベースから製品カテゴリーの一覧を取得し、それらをビューファイルへ渡し、適切なHTMLに描画してブラウザへ返します。
初回のASP.NET MVC 3プレビュー版でモデルを参照
初回のASP.NET MVC 3プレビュー版でRazorを使用すると、「Index.cshtml」ビューファイルには@inheritsステートメントがファイルのトップにあり、これは『System.Web.Mvc.WebViewPage<TModel>』クラスからそのビューを継承することを示しています。そして、そこへビューモデルの型を引き渡すことにより、ビューファイルは強く型付けされたものであるこを示します。
これは動作しますが(ASP.NET MVC 3でもサポートされています)、すこし冗長です。
ASP.NET MVC 3ベータ版と@model新文法を使用してモデルを参照
ビューファイル内で強く型付けされたモデルクラスを使用することを示すために、よりクリーンで簡潔な方法を提供する@model新ディレクティブをASP.NET MVC 3ベータ版に追加しました。これにより、@model StrongModelTypeを、Razorビューファイルのトップに書くだけでよくなり、@inheritsやビューの基本クラスの指定はもう必要はありません。
上記の文法は概念的には以前と同じです(ただし文字数は激減します)。より簡単に読み書きできます。
以下は、上記の元のスクリーンショットを描画する、「Index.cshtml」のビュー実装が完成した様子です。
恐らく、「指定しない場合ビューファイルは何から継承されるの?」という疑問を持たれるかもしれません。デフォルトでは、Razorは、『System.Web.Mvc.WebViewPage<TModel>』基本クラスからビューを継承します。オプションで、このデフォルト基本クラス(およびビューファイル内にデフォルトでインポートされたコードの名前空間の一覧)を、「\Views」ディレクトリの「web.config」ファイルを修正することで、オーバーライドできます。これにより、たとえ独自のViewの基本クラスを作成して使用する場合でも、ビューファイル内の文法はクリーン(そしてDRY)に保てます。
Razorファイル内での、Visual Studioのコード/タグのIntelliSenseや色指定は、今月初旬のベータ版では利用できません。数週間後には確認できる予定です。これにより、Razorファイル内のHTML、JavaScript、CSS、C#/VBに対して完全なIntelliSenseがサポートされます。
まとめ
ASP.NET MVC 3およびRazorのリリースにおいて取り組んだテーマの一つが、コードをよりクリーンで簡潔にすることでした。
上記の@modelキーワードは小さい機能ですが、ビューファイルの読み書きをより一層簡単にすることにうまく貢献しています。
今後の投稿で、ASP.NET MVC 3ベータ版の新機能でこのような素晴らしい機能をカバーしていきます。
Hope this helps,
Scott