本稿は、Scott Guthrie氏のブログを、氏の許可を得て、翻訳、転載したものです。米Microsoft社の副社長で、ASP.NETやSilverlightの開発チームを統率する氏のブログでは、次期製品を含む最新の技術をいち早く紹介しています。
ASP.NET MVC 3:Razorでサーバーサイドのコメント
今週の初めに、ASP.NET MVC 3 リリース候補版を出荷しました。これは『go live』デプロイをサポートし、ASP.NET MVC 3 ベータ版および最初のプレビューリリースで導入した機能に、非常に素晴らしい数多くの改善が行われています。
この投稿は、ASP.NET MVC 3ベータ版/RCの新機能を、いくつか詳細に紹介していく『ミニ投稿』シリーズの1つです。
- Razorの@model新キーワード(10月19日)
- Razorでのレイアウト(10月22日)
- Razorでサーバーサイドのコメント(本日:11月12日)
本日の投稿では、最近導入した小さいけれど便利な、Razorでのサーバーサイドコメントサポートの機能について話します。
なぜサーバーサイドコメントなのか?
- シナリオ:
ビューテンプレートで作業していて、一時的にいくつかのコンテンツまたはビューコードを無効にしたいとします(問題点を追跡するため、または一時的にサイトの出力を変更するため)。
HTMLは、クライアントサイドのコメント(<!-- -]-[
)をサポートしており、それを使用することで、HTMLコンテンツのパース/実行/表示をしないようにできます。多くのシナリオでは、この方法を使用すると問題があり、コメント内のコンテンツでも不必要にサーバーからクライアントへ送られ、コメント内のサーバーサイドのコードも、サーバー上で実行されてしまいます。
ASP.NET Webフォームは、サーバーサイドコメントの文法(<%-- --%>
)をサポートしており、これを使用するとページ内で、コンテンツ/コード/コントロールを完全に無効にできます。サーバーサイドコメントを使用すると、ASP.NET Webフォームのコンパイラーはブロック内のすべてを、パース時に完全に無視し、ページを組み立てる際に完全にそのコンテンツを削除します(まるでそこにはコンテンツが全くなかったかのように)。ここにある私の昔のブログ投稿で、詳細を確認できます。
今週聞かれた質問が、『Razorでこれと同じことはできないのか?』でした。答えは「もちろんできます!」です。
Razorでサーバーサイドのコメント
Razorでは、@*
コメント*@
文法(C#およびVBテンプレートのどちらでも動作します)内の、ビューのコード/コンテンツ/範囲をすべてラップできるようになりました。この文法により、Razorのパーサーが、そのブロック内のもの全てを無視して、まるで何もなかったかのように取り扱います(つまり何も実行されないので、実行時にパフォーマンスのオーバーヘッドが発生せず、クライアントには何も送られません)。
例えば、以下では、いくつかのHTMLコンテンツとサーバーコードを、@* *@
ブロック内にラップしました。これは、ここに何も無いのと同じことになります。
上記では、Visual Studio(今週のASP.NET MVC 3 RCビルド版から対応)が、エディタ内で、よりそれらを見やすくするためにコメントを色づけしていることが分かります(デフォルトは緑)。
Visual Studioでは、テキスト/コードのブロックを、簡単にコメント/コメント解除するのに、テキストエディターのツールバー上のコメント/コメント解除ボタンが利用できます。例えば、テキストエディター内で、上記の@* *@
コメントブロックを選択して、[コメント解除]ツールバーボタン(または「Ctrl+K」「Ctrl+U」を押して)で、その範囲をコメント解除します。
これを行うと、エディタは自動的にそのブロックを、コメント解除します(キーストロークが少し減ります)。
またエディター内の別のテキスト/コード範囲を選んで、[コメント]ツールバーボタンをクリックするか、「Ctrl+K」「Ctrl+C」を押して、サーバーサイドコメントを適用します。
これを行うと、エディタは自動的にそのブロックをコメントします(キーストロークが少し減ります)。
まとめ
サーバーサイドコメントは、小さいけど便利な機能で、様々な場面で役立ちます。Razorは、サーバーサイドコメントを実行時に有効化し、Visual Studioはそれをサポートするツールを開発時に提供します。
Hope this helps,
Scott
P.S. ブログに加え、現在Twitterを使って簡単な更新やリンク共有を行っています。twitter.com/scottguで、私をフォローしてください。