7

私のコードはコンパイルされ、エラーなしで実行されます。ただし、期待どおりにレンダリングされません。

その理論:

複数のレイアウトページを使用したい。

「ベース」レイアウトには、ソリューションで使用されているスタイルファイルとJavaScriptファイルのみを含める必要があります。

他のレイアウトには、htmlコンテンツまたはラッパーが含まれている必要があります。このレイアウトは現在不要に思えますが、私の上司はそれが将来の偉大さにつながることを私に保証します。複数のヘッダーがある場合や、特定のページにヘッダーやフッターがない場合など。主なことは、複数のContentLayoutを使用することですが、1つの共通のBaseLayoutを使用することです。

コード:

_BaseLayout

<html>
   <head>
       <link href="@Url.Content("~/Content/css/main.css")" rel="stylesheet" type="text/css" />
       <script type="text/javascript" src="@Url.Content("~/Scripts/common.js")"></script>
       @RenderSection("JavaScript", false)
       @RenderSection("Css", false)
   </head>
   <body>
       @RenderBody()
   </body>
</html>

_ContentLayout

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

 @RenderSection("JavaScript", false)
 @RenderSection("Css", false)

 <div class="page">
     <section class="wrapper">
       @RenderBody()
     </section>
 </div>

View.cshtml

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

 @section JavaScript
 {
      <script type="text/javascript">
    (function ($) {
        $(function () {
            //do stuff;
        });
    } (jQuery));
</script>
 }

 <div>
      //html content
 </div>

前に述べたように、これは機能します。問題は、ページソースを表示すると、ビューからのスクリプトが_ContentLayoutにレンダリングされ、指定されたスクリプト領域の外に出てしまうことです。スクリプトコードを次のレイアウトに「キック」できますか?これにより、すべてのスクリプトコードを同じ領域に配置できます。

4

1 に答える 1

6

@RenderSection()あなたは行動に関して見解を発展させるべきです。

それぞれ@RenderSection()がその子孫をレンダリングします@section SectionName { }。したがって、ビューを次の順序で変更する必要があります。

_BaseLayout.cshtml-そのままです。

_ContentLayout.cshtml

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

@section JavaScript {
    @RenderSection("JavaScriptToHead", false)
}

@section Css {
    @RenderSection("CssToHead", false)
}

<div class="page">
    <section class="wrapper">
        @RenderBody()
    </section>

そして最後にView.cshtml

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

@section JavaScriptToHead {
    //JS stuff
}

@section CssToHead {
   //Css stuff
}

<div>
    //html content
</div>
于 2012-06-27T04:29:03.640 に答える