コード例:VisualStudioのMVC5プロジェクトで、次のコントローラーとビューをセットアップしました。
コントローラー
TestController.cs
public class TestController : BaseController
{
public ActionResult Index()
{
return View("Index");
}
public PartialViewResult MyPartialView1()
{
return PartialView("PartialView1");
}
public PartialViewResult MyPartialView2()
{
return PartialView("PartialView2");
}
}
ビュー
Index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<script src="@Url.Content("~/Scripts/jquery-2.1.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
</head>
<body>
<h1>Testing Unobtrusive AJAX</h1>
@Ajax.ActionLink("Partial 1", "MyPartialView1", "Test",
new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = InsertionMode.Replace })
|
@Ajax.ActionLink("Partial 2", "MyPartialView2", "Test",
new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = InsertionMode.Replace })
<div id="contentShouldLoadHere">
<p>This will get replaced.</p>
</div>
</body>
</html>
PartialView1.cshtml
<h1>Test 1</h1>
PartialView2.cshtml
<h1>Test 2</h1>
質問
正しく理解していれば、「Partial 1」をクリックすると、「PartialView1」のコンテンツが「contentShouldLoadHere」のIDでHTML要素に読み込まれます。代わりに、[Partial 1]をクリックすると、MyPartialView1アクションの通常のページ読み込みが発生します(~/Test/MyPartialView1)
、およびChrome開発ツールコンソールで、次のJavaScriptエラーが発生します。
Uncaught ReferenceError: Sys is undefined
なぜこれなのか、どうすれば修正できるのか誰か知っていますか?
メモ-Chrome Dev Toolsを介して、両方のスクリプトが正しくロードされていることを確認しました。-@ Ajaxヘルパーによって生成されたリンクのHTMLは次のとおりです。
<a href="/Test/MyPartialView1" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'contentShouldLoadHere' });">Partial 1</a>
リンク用に生成するhtmlは、控えめなJavaScriptが無効になっている場合に生成されます。ビューで有効にできます
@{HtmlHelper.UnobtrusiveJavaScriptEnabled = true;}
または(web.config
内の)アプリケーションの場合
<configuration>
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
レンダリングされたhtmlは次のようになります。
<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#contentShouldLoadHere" href="/Test/Partial1">Partial 1</a>
jquery.unobtrusive-ajax.js
ファイルで動作します