38

私はAsp.NetMVC3の初心者です。誰かがこのコードの意味を説明できますか?

@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は何をし、ここでレンダリングされているものを見つけるにはどうすればよいですか?

4

3 に答える 3

49

スコットはある時点で書いた

「RenderSection()」ヘルパーメソッドの最初のパラメーターは、レイアウトテンプレートのその場所にレンダリングするセクションの名前を指定します。2番目のパラメーターはオプションであり、レンダリングするセクションが必須かどうかを定義できます。セクションが「必須」の場合、そのセクションがレイアウトファイルに基づくビューテンプレート内に実装されていない場合、Razorは実行時にエラーをスローします(これにより、コンテンツエラーの追跡が容易になります)。

したがって、RenderSectionが行うことは、(一般的な_Layoutではなく)テンプレート/ビューで定義されたセクションをレンダリングすることです。「ビューテンプレートでの「SideBar」セクションの実装」の少し下で、セクションの実装方法について説明します。

つまり、全体として、「head」と呼ばれるセクションが、さらに下/ネストされたビューに「head」と呼ばれるセクションをレンダリングします。

編集: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>
}
于 2012-05-26T09:09:21.410 に答える
19

ビューでセクションを定義し、それを_Layout.cshtmlでレンダリングします。

レイアウト(マスター)ページにこれを配置します:

 @RenderSection("head", false)

ビューページにこれを配置します:

@section head {

PUT VIEW SPECIFIC CODE HERE
}

ここで「head」は、ビューページで定義できるセクションの名前です。

これは、asp.netWebフォームで使用するContentPlaceHolderにいくぶん似ています。

于 2012-05-26T09:08:11.803 に答える
0

_Layoutファイルで@rendersectionを使用することにより、メインの.cshtmlコード(たとえば、index.cshtmlと呼ばれる)のセクションのレイアウトと順序を制御できます。

たとえば、_Layoutファイルの最後に@RenderSection( "scripts"、false)がある場合、 "scripts"セクションがindex.cshtmlファイルの上部に配置されていても、下部にレンダリングされます。 。したがって、すべてのスクリプトセクションがアプリケーション全体で一貫した方法でロードされるようにします。

将来、何らかの理由ですべてのスクリプトをヘッドセクションに移動することにした場合は、_Layoutファイルの1行のコードを移動するだけで簡単に移動できます。

于 2019-01-29T14:05:03.827 に答える