web-dev-qa-db-ja.com

ネストされたかみそりテンプレートの@RenderSection

私の問題は、@RenderSectionがベーステンプレートで定義されている場合、ネストされたテンプレートから@RenderSectionを使用できないようです。現在、子テンプレートにリンクされたネストされたベーステンプレートがあり、ビューテンプレートで使用されています。ベーステンプレートで@RenderSectionを定義してビューページにレンダリングすると、エラーが発生します。

ここに正確な問題があります。

RenderSectionを作成して、カスタムスクリプトを挿入できるようにしたいと考えています。私の基本テンプレート...

<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
 @RenderSection("HeaderContent", false) // The region of the header scripts (custom css)

</head>
<body>
@RenderBody()
</body>
</html>

そこにカスタムヘッドコードを配置してページ自体に適用したくないので、子テンプレートをスキップします。

@section HeaderContent {
    <script>alert("hi");</script>
}

私の問題は、通常のページからベーステンプレートにカスタムヘッドコードを追加できないようです。

次のセクションは定義されていますが、レイアウトページ~/Views/Shared/OneColLayer.cshtml": "HeaderContent用にレンダリングされていません。

ビューページにベーステンプレートへのポインタを含める必要がありますか?

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

新しいベーステンプレート

<head>
  <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/layout.css")" />
  <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/global.css")" />
  <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script>
  <script type="text/javascript" src="@Url.Content("~/js/fadeInFadeOut.js")"></script>
  <title>@ViewBag.Title</title>
  @RenderSection("HeaderContent", false)
</head>
<body>
  @RenderBody()
</body>

私の新しい子テンプレート

@{
  Layout = "~/Views/Shared/BaseTemplate.cshtml";
}
@RenderSection("HeaderContent", false)
@RenderBody()

私の見解

@{
  ViewBag.Title = "Home";
  Layout = "~/Views/Shared/OneColLayer.cshtml";
}
@section HeaderContent {
  <h1>Left Content</h1>
}
<div>my view content</div>

コンテンツはoneColテンプレートに配置され、ベーステンプレートになりました。

結果...

<div id="Content">
   <h1>Left Content</h1>
</div>
36

中央のテンプレートで通過を許可されるセクションを指定する必要があります。

BaseTemplate.cshtml

<!DOCTYPE html>
<html>
  <head>
    <title>@ViewBag.Title</title>
    @RenderSection("HeaderContent", false) @* The region of the header scripts (custom css) *@
  </head>
<body>
  @RenderBody()
</body>
</html>

[〜#〜]編集[〜#〜]

新しい子テンプレート

@{
  Layout = "~/Views/Shared/BaseTemplate.cshtml";
}
@section HeaderContent {
  @RenderSection("HeaderContent", false)
}
@RenderBody()

レンダリングセクションをベーステンプレートのセクション内に配置すると、そのセクションはベーステンプレートの正しい場所にレンダリングされます。


View.cshtml->レイアウトとしてMiddleLayout.cshtmlを使用します

@section HeaderContent
{
    <!-- header content that will now render -->
}

<!-- page content -->
56
Nick Larsen