ASP.NET Forms アプリ (私が作成したものではない) を MVC 3 アプリに変換しています。ClientScriptManager は古いアプリで使用されます。ClientScriptManager は MVC 3 には存在しません。何が ClientScriptManager を置き換えましたか? 私は、CSM が ASP.NET の AJAX 機能と関係があることを知るのに十分な量の読み物をしました。js スクリプトと関数の「セット」を登録し、EditorTemplates が同様のコントロールのセットに対してどのように機能するかに少し似ています。私は必ずしも MVC に CSM を実装しようとしているわけではありません。Microsoft が CSM を時代遅れにするために導入したプラクティスを知りたいだけです。
2 に答える
ASP.Net MVC は、ASP.Net のようにフレームワークに HTML と js をレンダリングさせるのではなく、HTML と js を完全に制御できるように設計されています。そのため、ClientScriptManager を実際に「置き換える」ものはありません。その結果、js をどのように扱うかは完全にあなた次第です。
<script ...>
ファイル内のインライン スクリプトまたは js ファイルを参照するためのタグを含めるなどの簡単なことを行うことも、 RequireJS_Layout.cshtml
のようなある種の JavaScript ローダーを使用することも、「Html ヘルパー」などを使用して完全に独自のスキームを考え出すこともできます。
MVC 4 はバンドルの概念を導入しました。これにより、スクリプトのコレクションを「バンドル」として定義し、次のようにビューでスクリプトを参照するときに、MVC が自動的にそれらを縮小してマージすることができます。
@Scripts.Render("~/bundles/jquery")
以下は、コントローラーから JavaScript(関数) をレンダリングする例です。
コントローラ
public ActionResult Index(int? id)
{
ViewBag.MyAlert = "<script type='text/javascript'>MyAlert();</script>";
}
意見
<script src="Your Path" type="text/javascript"></script>
@Html.Raw(ViewBag.MyAlert)
JS
function MyAlert() {
alert('Hi');
}
以下は、Controller から JavaScript(File) をレンダリングする例です。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script src='Your Path' type='text/javascript'></script>");
filterContext.HttpContext.Response.Write(sb.ToString());
}
したがって、このアプローチを使用すると、ビューで次のコードに言及する必要はありません。
<script src="Your Path" type="text/javascript"></script>