140

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

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

  • Index.cshtml は共有ビューですか?
  • サンプル コード@sectionでは、特定のビューでコードを使用しています。なんで?

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

4

4 に答える 4

144

@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 answerでさらにいくつか言及されているこの設定を調整するには、さまざまな方法があります。

于 2012-10-26T15:11:20.150 に答える
21

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

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

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

于 2012-10-26T15:11:33.967 に答える
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を使用していることを示しています。

于 2012-10-26T18:02:53.010 に答える
3

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

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

お役に立てれば。

于 2012-10-26T15:14:29.333 に答える