15

示例代码:在 Visual Studio 的一个 MVC 5 项目中,我设置了以下控制器和视图:

控制器

测试控制器.cs

public class TestController : BaseController
{
    public ActionResult Index()
    {
        return View("Index");
    }

    public PartialViewResult MyPartialView1()
    {
        return PartialView("PartialView1");
    }

    public PartialViewResult MyPartialView2()
    {
        return PartialView("PartialView2");
    }
}

意见

索引.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”的内容加载到 ID 为“contentShouldLoadHere”的 HTML 元素中。相反,单击“Partial 1”会导致 MyPartialView1 操作 ( 的正常页面加载~/Test/MyPartialView1),并且在 Chrome 开发工具控制台中,我收到以下 JavaScript 错误:

Uncaught ReferenceError: Sys is undefined

有谁知道这是为什么,我该如何解决?

注释 - 我已通过 Chrome 开发工具确认两个脚本都已正确加载。- @Ajax 帮助器生成的链接的 HTML 是:

<a href="/Test/MyPartialView1" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: &#39;contentShouldLoadHere&#39; });">Partial 1</a>
4

2 回答 2

35

如果不显眼的 javascript 已被禁用,则会生成您为链接生成的 html。您可以在视图中启用它

@{HtmlHelper.UnobtrusiveJavaScriptEnabled = true;}

或对于应用程序(in 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文件

于 2014-11-19T05:08:31.660 回答
0

对我来说,只需添加 'HtmlHelper.UnobtrusiveJavaScriptEnabled = true;' 没有修复它。我还必须添加“HtmlHelper.ClientValidationEnabled = true;”。在 Global.asax 中为这两种设置添加代码修复了它。

于 2022-01-24T23:15:50.223 回答