ASP.NET MVC:@sectionの目的は何ですか?[閉まっている]


132

ASP.NET MVCアプリケーションについては、このブログ記事を参照しました。著者ScottGuが@sectionIndex.cshtmlに追加します。

いくつか質問があります(上記の記事を参照):

  • Index.cshtmlは共有ビューですか?
  • コード例@sectionでは、特定のビューのコードを使用しています。どうして?

@sectionビューで使用する理由と時期を誰かが説明できますか?


4
:このチュートリアルを見てくださいweblogs.asp.net/scottgu/archive/2010/12/30/...
アドリアーノRepetti

1
今日のより良い閉鎖理由は「主に意見ベース」であると主張することができますが、それはまだ閉鎖されます。セクションを使用する明確な方法はありません。
Richard

2
何かを使用する決定的な方法はありません。ただ...人々がインターネットを使用する方法を見て
keji

回答:


138

@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";
}

この設定を調整するには、さまざまな方法があり、このSO回答でさらにいくつか説明されています


Frazellに感謝します。そのチュートリアルに関連して、質問にさらに追加しました。さらに説明できますか?再度、感謝します!
偽物

こんにちは@ABogus私は答えを更新しました。この追加情報がお
役に立てば幸い

21

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

ページの中央にしかアクセスできないレイアウト/マスターページに基づくビューからこれをどのように行いますか?

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


4

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

リンクした特定の例では、彼は_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を使用していることを示しています。


_ViewStartの素晴らしい説明。
ᴍᴀᴛᴛʙᴀᴋᴇʀ

3

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

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

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.