<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))
残りのコードはありますか?