0

<script>すべてのビューのタグの形式と形状でデータベースから統計情報を取得しています。一部は に<head>、その他は に配置され<body>ます。

この情報の一部は、Google アナリティクスなどのすべてのビューで共有されますが、注文確認ビューでのみ利用可能な注文の詳細など、特定のビューのみに固有の情報もあります。

最終結果は次のようになります。

<head>
    <script><!-- Google Analytics --></script>
</head>

レイアウトで名前付きセクションを使用して、目的を達成しています。

<head>
    @RenderSection("headScripts", required: false)
</head>

<body>
    @RenderSection("bodyScripts", required: false)
</body>

サンプル ビュー コードは次のとおりです。

@if ((Model.Scripts.Head != null) && (Model.Scripts.Head.Count() != 0))
{

    <text>
    @section headScripts
    {
        @foreach (var script in Model.Scripts.Head)
        {
            @Html.Raw(@script.Code);
        }
    }
    </text>

}

すべてのビュー モデルは Scripts フィールドを持つ基本クラスから継承されており、上で貼り付けたコードがすべてのビューに複製されており、これが問題です。

</body>レイアウトのすぐ下にあるこの行から始めて、コードを PartialView に移動しようとしました。

@{Html.RenderAction("Index", "Scripts");}

そして、私の ScriptsController で:

public ActionResult Index()
{
    Scripts scripts = new Scripts();
    scripts.Head = whatever comes from the database;
    scripts.Body = whatever comes from the database;    

    return PartialView("/Views/Shared/scripts.cshtml", scripts);
}

すべてが機能し、モデルは正しく読み込まれ、スクリプトの部分ビューで使用できますが、残念ながら部分ビュー@sectionで呼び出すことができないため、<script>タグは表示されません。

すべてのビューで使用される 1 つの共通の場所にある回避策と@if ((Model.Scripts.Head != null) && (Model.Scripts.Head.Count() != 0))残りのコードはありますか?

4

1 に答える 1