ASP.NET MVCアプリケーションについては、このブログ記事を参照しました。著者ScottGuが@section
Index.cshtmlに追加します。
いくつか質問があります(上記の記事を参照):
- Index.cshtmlは共有ビューですか?
- コード例
@section
では、特定のビューのコードを使用しています。どうして?
@section
ビューで使用する理由と時期を誰かが説明できますか?
ASP.NET MVCアプリケーションについては、このブログ記事を参照しました。著者ScottGuが@section
Index.cshtmlに追加します。
いくつか質問があります(上記の記事を参照):
@section
では、特定のビューのコードを使用しています。どうして?@section
ビューで使用する理由と時期を誰かが説明できますか?
回答:
@section
コンテンツを定義するためのもので、共有ビューからオーバーライドされます。基本的に、これは共有ビューを調整する方法です(Webフォームのマスターページと同様)。
Scott Guのこれに関する非常に興味深い記事を書いているかもしれません。
編集:追加の質問の説明に基づく
@RenderSection
:構文は、次のような、共有ビューに入ります
<div id="sidebar">
@RenderSection("Sidebar", required: false)
</div>
これは@Section
構文でビューに配置されます:
@section Sidebar{
<!-- Content Here -->
}
MVC3 +では、ビューに直接使用するレイアウトファイルを定義するか、すべてのビューにデフォルトビューを設定できます。
共通のビュー設定は、次のようなデフォルトのレイアウトビューを定義する_ViewStart.cshtmlで設定できます。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
このスニペットに示すように、ファイルで直接使用するように共有ビューを設定することもできます(index.cshtmlなど)。
@{
ViewBag.Title = "Corporate Homepage";
ViewBag.BodyID = "page-home";
Layout = "~/Views/Shared/_Layout2.cshtml";
}
レイアウトページで定義されているプレースホルダーにコード/コンテンツの一部をレンダリングする場合は、セクションを使用します。
リンクした特定の例では、彼は_Layout.cshtmlでRenderSectionを定義しています。そのレイアウトを使用するビューはすべて、レイアウトで定義されたのと同じ名前の@sectionを定義でき、レイアウトのRenderSection呼び出しを置き換えます。
おそらく、Index.cshtmlがそのレイアウトをどのように使用しているのかを知りたくありませんか?これは、MVC / Razorの慣例によるものです。彼がビューを追加しているダイアログを見ると、[レイアウトまたはマスターページを使用する]ボックスがチェックされており、そのすぐ下に[Razor _viewstartファイルに設定されている場合は空のままにする]と表示されています。表示されていませんが、その_ViewStart.cshtmlファイル内には次のようなコードがあります。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
viewstartsが機能する方法は、同じディレクトリまたは子ディレクトリ内のcshtmlファイルが、それ自体を実行する前にViewStartを実行することです。
これは、Index.cshtmlがShared / _Layout.cshtmlを使用していることを示しています。