本稿は、Scott Guthrie氏のブログを、氏の許可を得て、翻訳、転載したものです。米Microsoft社の副社長で、ASP.NETやSilverlightの開発チームを統率する氏のブログでは、次期製品を含む最新の技術をいち早く紹介しています。
ASP.NET MVC 3とRazorの@helper文法
ASP.NET MVC 3は、既存の.aspxビューエンジンのサポートおよび改善を継続して行うとともに、『Razor』という新しいビューエンジンオプションもサポートしています。Razorはビューテンプレートを書く時の文字数やキーストロークを最小化し、高速で流線的なコーディングのワークフローが可能になります。
多くのテンプレート文法とは違い、Razorでは、HTMLでサーバーブロックの開始と終了を明示的に示すコードが必要ありません。Razorのパーサーはコードからこれを推測します。これにより、コンパクトで表現力のある文法が可能となり、クリーンで高速で楽しくタイプできます。
過去9か月間に行った ブログ投稿からRazorについての詳細を確認できます。
- Razorの紹介
- Razorの@model新キーワード
- Razorでのレイアウト
- Razorでのサーバーサイドのコメント
- Razorの@:と<text>文法
- Razorで暗黙的、明示的コードナゲット
- Razorのレイアウトとセクション
本日のブログでは、多くの人がまだ知らないRazorの素晴らしい機能で、@helper文法を使ってヘルパーメソッドの再利用を定義する機能をカバーします。
簡単な@helperメソッドのシナリオ
Razorの@helperにより、ビューテンプレートでの出力機能をカプセル化して、ヘルパーメソッドを簡単に再利用できます。コードのより良い再利用化ができ、より読みやすいコードにできます。では、@helper文法の使用法を示す非常に簡単なシナリオを見てみましょう。
@helperメソッドを定義する前のコード
これは製品の詳細を示し、製品の価格が無償であれば『FREE!』と表示する簡単な製品一覧です。
上記のコードは非常に直接的で、Razorの文法により、HTML内のC#コードと簡単に統合できます。
価格に対するif/elseロジックの部分が、ちょっとややこしくなっています。サイト内(または同じページ内)のどこでも好きな場所に価格を出力できるため、上記のロジックがいろんな場所で重複すると、エラーになりやすく、保守も難しくなります。このようなシナリオは、抜き出し、@helper文法を使用してヘルパーメソッドの中へリファクタリングする、第一候補になります。
@helper文法を使用して上記のサンプルをリファクタリング
では、価格出力ロジックを抜き出して、『DisplayPrice』という名前のヘルパーメソッドにカプセル化しましょう。これを行うには、以下のように、サンプルコードを書き直します。
『DisplayPrice』という再利用可能なヘルパーメソッドを定義するために、上記の@helper文法を使用しました。標準のC#/VBメソッドと同じように、いくつでも引数を持つことができ、またNullableやOptionalの引数も定義可能です。標準のC#/VBメソッドと違うところは、@helperメソッドは、コンテンツとコードを両方持つことができ、その中でRazor文法をフルサポートします。これにより、ヘルパーメソッドの描画やフォーマット化を簡単に定義およびカプセル化できます。
標準のC#およびVBメソッドのように、@helperメソッドを呼び出せます。
メソッドが呼び出されると、Visual StudioはコードIntelliSenseを提供します。