###前提・実現したいこと
「ASP.NET MVC 5」での開発を最近始めたばかりです。
RenderSectionの動きがもう一つ良く分からないですが。
下記コードのように部分ビュー(_TopixView.cshtml)内でJavaScriptを書いているのですが、
部分ビュー内のJavaScriptが有効になりません。
Index.cshtml内のJavaScriptは有効になっています。
jsファイルを作成し、BundleConfig.csで追記することで動作は確認できているのですが、
部分ビュー内でしか使わないようなJavaScriptをビューの方にまとめられないかと?と思っています。
###該当のソースコード
Views/Shared/_Layout.cshtml
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - マイ ASP.NET アプリケーション</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="container body-content"> @RenderBody() </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", false) </body> </html>
Views/Shared/_TopixView.cshtml
@section scripts { <script type="text/javascript"> document.getElementById("topixTitle").style.color = "red"; </script> } <h2 id="topixTitle">トピックス</h2>
Views/Home/Index.cshtml
@{ ViewBag.Title = "Home Page"; } @section scripts { <script type="text/javascript"> document.getElementById("title").style.color = "blue"; </script> } <h2 id="title">Home Index</h2> <div> @Html.Partial("_TopixView") </div>
###補足情報(言語/FW/ツール等のバージョンなど)
Windows 10
Visual Studio Professional 2017
ASP.NET MVC 5
Bootstrap 3.3.7
jQuery 3.2.1
追記-1
修正依頼を受けまして出力されたhtmlファイルを追記します。
(見やすいように改行・インデントは変更しています。)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home Page - マイ ASP.NET アプリケーション</title> <link href="/Content/bootstrap.css" rel="stylesheet" /> <link href="/Content/site.css" rel="stylesheet" /> <script src="/Scripts/modernizr-2.6.2.js"></script> </head> <body> <div class="container body-content"> <h2 id="title">Home Index</h2> <div> <h2 id="topixTitle">トピックス</h2> </div> </div> <script src="/Scripts/jquery-1.10.2.js"></script> <script src="/Scripts/bootstrap.js"></script> <script src="/Scripts/respond.js"></script> <script type="text/javascript"> document.getElementById("title").style.color = "blue"; </script> </body> </html>
追記-2
部分ビューは別のページにも配置されるので、
@Html.Partal("_TopixView")の次の行に@section scriptsを書く案は、現実的ではないですね。
いちおう試してみたのですが@section scriptsの分割して書くと
「HttpException」が吐かれるので、一カ所にまとめないと駄目でした。
セクション名を変えれば大丈夫でしたが。
外部ファイルにする案は、
topix.js
JavaScript
1document.getElementById("topixTitle").style.color = "red";
_TopixView.cshtml
<h2 id="topixTitle">トピックス</h2> <script type="text/javascript" src="~/Scripts/topix.js"></script>
上記のようにすると反映されるようになりました。
ただ、sk_3122様が書かれているのですが、投稿したコードのように単純なものではなく
実際のコードはAjaxでJSONデータ受け取ってDOMでゴニャゴニャするつもりなので、
どうなるかを試してみたいと思います。
回答3件
あなたの回答
tips
プレビュー