2012-10-26 17 views
108

ASP.NET MVCアプリケーションの場合、誰かが理由と理由を説明してください。@sectionをビューに使用しますか?@sectionのASP.NET MVCの説明

this exampleには、@sectionがIndex.cshtmlに追加されています。 Index.cshtmlは共有ビューですか?この例のコードでは「このビューでは@sectionコードを使用しますが、そのビューでは使用しないでください」と記載されています。

+4

このチュートリアルをご覧ください:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx –

+19

良い質問を閉じた...再び... – Gudradain

+5

なぜこれを閉じる?良い質問です。 – Alan

答えて

108

@sectionは、コンテンツを定義するためのもので、共有ビューからのオーバーライドです。基本的には、共有ビューを調整する方法です(Webフォームのマスターページに似ています)。

Scott Gu's write up on this very interestingがあります。

編集:これは、その後@Section構文を使用してビューに配置されるだろう

<div id="sidebar"> 
    @RenderSection("Sidebar", required: false) 
</div> 

追加の質問を明確に基づいて

@RenderSection構文は、次のような、共有ビューに入ります

@section Sidebar{ 
    <!-- Content Here --> 
} 

MVC3 +では、レイアウトファイルを使用するように定義するかdを直接表示することも、すべてのビューのデフォルトビューを持つこともできます。

共通ビューの設定は次のようにデフォルトのレイアウトビューを定義する_ViewStart.cshtmlに設定することができます。

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

あなたはこのようなindex.cshtmlとして、ファイル内で直接使用する共有ビューをも設定することができますこのスニペットに示されているように直接。

@{ 
    ViewBag.Title = "Corporate Homepage"; 
    ViewBag.BodyID = "page-home"; 
    Layout = "~/Views/Shared/_Layout2.cshtml"; 
} 

あなたはthis SO answerで述べたいくつかのより多くでこの設定を調整することができ、さまざまな方法があります。

+0

ありがとうFrazell!私はそのチュートリアルを参考に私の質問にもっと多くを加えました。もっと説明できますか?再度、感謝します! –

+0

ちょっと@ABogus私は答えを更新しました。うまくいけば、この追加情報は役に立ちます:) –

15

良い例はJavascriptです。これがベストプラクティスであるため、これをブラウザでレンダリングされるページの最下部に配置します。

ページ中央にしかアクセスできないレイアウト/マスターページに基づいてどのように表示しますか?

これは、[レイアウト]ページの下部にある[スクリプト]セクションを宣言することで行います。次に、表示ページからレイアウトページの下部にコンテンツ(この場合はJavascriptが含まれています)を追加できます。

2

テンプレート内に@Sectionのコードを定義して他のファイルに含めることができます。たとえば、テンプレートに定義されているサイドバーは、別のインクルードビューで参照できます。

//This could be used to render a @Section defined as @Section SideBar { ... 
@RenderSection("SideBar", required: false); 

これが役立ちます。

3

レイアウトページで定義されているプレースホルダで、コード/コンテンツの一部をレンダリングする場合は、セクションを使用します。

リンクした特定の例では、彼は_Layout.cshtmlにRenderSectionを定義しています。そのレイアウトを使用するビューは、Layoutで定義されたものと同じ名前の@sectionを定義することができ、レイアウト内のRenderSection呼び出しを置き換えます。

おそらく、私たちがIndex.cshtmlがそのレイアウトを使用していることをどのように知っているのだろうか?これは、MVC/Razorの少しのコンベンションのためです。彼がビューを追加しているダイアログを見ると、 "レイアウトまたはマスターページを使う"というボックスがチェックされ、その下に "Razor _viewstartファイルで設定されていれば空のままにする"と表示されます。それは示されたが、その_ViewStart.cshtmlファイルの中のようなコードですされていません。

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

viewstartsの仕事は、それが自分自身を実行する前に、同じディレクトリまたは子ディレクトリ内の任意のCSHTMLファイルがViewStartを実行することである方法。

これは、Index.cshtmlがShared/_Layout.cshtmlを使用していることを示しています。

+0

_ViewStartの素敵な説明。 –

関連する問題