私はAsp.Net MVC3の初心者です。誰でもこのコードの意味を説明してください:
@section head
{
@RenderSection("head", false)
}
ScottGuの記事:
http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
renderSectionの例はありますが、@ sectionを定義してから@RenderSectionが使用されます。この場合、セクションヘッドが定義され、その中で同じヘッドがレンダリングされて混乱します。
RenderSectionは何を行い、ここでレンダリングされているものを見つけるにはどうすればよいですか?
スコットはある時点で書いた
「RenderSection()」ヘルパーメソッドの最初のパラメーターは、レイアウトテンプレート内のその場所でレンダリングするセクションの名前を指定します。 2番目のパラメーターはオプションであり、レンダリングするセクションが必要かどうかを定義できます。セクションが「必要」な場合、そのセクションがレイアウトファイルに基づくビューテンプレート内に実装されていないと、Razorは実行時にエラーをスローします(これにより、コンテンツエラーの追跡が容易になります)。
したがって、RenderSectionが行うことは、テンプレート/ビューで定義されたセクションをレンダリングすることです(一般的な_Layoutではありません)。 「Viewテンプレートの「SideBar」セクションの実装」の少し下で、セクションの実装方法を説明しています。
全体として、あなたが持っているのは「ヘッド」と呼ばれるセクションで、これはさらに下にある/ネストされたビューで「ヘッド」と呼ばれるセクションをレンダリングします。
編集: http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx を見てくださいネストされたビューの意味-ただし、この記事は1年以上前のものです。
MasterLayout:
@RenderSection("head", false)
サブレイアウト:
@{
Layout = "~/Views/_MasterLayout.cshtml";
}
@section head
{
@RenderSection("head")
}
コンテンツ:
@{
Layout = "~/Views/_SubLayout.cshtml";
}
@section head
{
<title>Content-Layout</title>
}
ビューでセクションを定義し、_Layout.cshtmlでレンダリングします。
レイアウト(マスター)ページに以下を配置します。
@RenderSection("head", false)
ビューページに以下を配置します。
@section head {
PUT VIEW SPECIFIC CODE HERE
}
ここで、「head」は、ビューページで定義できるセクションの名前です。
Asp.net Webフォームで使用するContentPlaceHolderに似ています。
_Layoutファイルで@rendersectionを使用することにより、メインの.cshtmlコードのセクションのレイアウトと順序を制御できます(index.cshtmlと呼ばれるものとします)
たとえば、_Layoutファイルの最後に@RenderSection( "scripts"、false)がある場合、 "scripts"セクションがindex.cshtmlファイルの上部に配置されていても、下部にレンダリングされます。したがって、すべてのスクリプトセクションがアプリケーション全体で一貫した方法でロードされるようにします。
将来、何らかの理由ですべてのスクリプトをheadセクションに移動することにした場合、_Layoutファイル内の1行のコードを移動するだけで簡単に実行できます。