2015年3月19日木曜日

2.3 ASP.NET MVC(2)

ビュースクリプトの実装(Razor)

コントローラで実行したアクションの結果を出力するためのビュースクリプトを作成する。
作成する場所はViewsフォルダ配下で、<コントローラ名>/<アクション名>.vbhtmlという名前にする。
コントローラのViewヘルパーメソッドでビュースクリプト名を指定した場合は、その名前で作成する。

コントローラで設定したビュー変数ViewDataの各プロパティをHTMLに埋め込む感じ。プロパティを新たに設定する場合は、ビュースクリプトの@Code~End Codeの間に書く。
ビュースクリプトの例はこんな感じ。

@Code
 ViewData("Title") = "About"
End Code

@ViewData("Title").

@ViewData("Message")

Use this area to provide additional information.

ViewData("Message")はコントローラで設定済み。ViewData("Title")を"About"としているので、上記ソースの5行目は

About.

と書いたのと等価になる。
ここで分からないのが、ViewDataの前に@をつける場合とつけない場合があること。設定時は@をつけず、出力時には@をつける???

レイアウトの適用

上記で作成したビュースクリプトですが、HTML文書というにはhead要素とかいろいろと足りないものがあります。実はこのビュースクリプトを埋め込んで完全なHTMLを作成する「レイアウト」というのがあり、これはViewsフォルダ配下のShared/_Layout.vbhtmlがそれであるというのです。スタイルなんかをここで定義するわけですね。ここではコードは省略しますが、コード中の「@RenderBody()」というところにビュースクリプトが埋め込まれます。本文では、「ビュースクリプトの結果が埋め込まれる」とあるので、@ViewData("Title")というのは、ViewData("Title")を出力しなさいという命令である、と理解したほうがよさそうです。@がつくと命令ということ?

また、このレイアウトファイルは必ず_Layout.vbhtmlになるのかというとそういうわけでもなく、レイアウトファイルのファイル名を指定しているのは、Views/_ViewStart.vbhtml(ファイル名固定)で、Layout変数で指定したファイルをレイアウトと認識します。Razorはビューの処理に先立ち、まずこの_ViewStart.vbhtmlの処理を行うので、_ViewStart.vbhtmlには、レイアウトファイルの指定のほか、ビュースクリプトに共通の処理があれば、それも記述します。

0 件のコメント:

コメントを投稿