MVC5 Ajax.ActionLink加载新页面,而不是替换

时间:2019-01-26 05:10:12

标签: javascript jquery asp.net-mvc-5 actionlink html.actionlink

我知道类似的问题已经被问过多次。对于我的一生,我无法确定自己想念的是什么,请忍受我。

我正在尝试使用页面上某个项目的编辑器加载部分视图,并将该编辑器显示为Bootstrap模式,但始终会加载到新页面。

_Layout.cshtml引用了jQuery捆绑包:

@Scripts.Render("~/bundles/jquery")

`BundleConfig.RegisterBundles()添加jQuery和简洁的Ajax:

bundles.Add(new ScriptBundle("~/bundles/jquery")
    .Include("~/Scripts/jquery-{version}.min.js") // <-- must come first
    .Include("~/Scripts/jquery.unobtrusive-ajax.min"));

Scripts文件夹包含两个文件:

Scripts Folder screenshot showing both files

View的{​​{1}}为空,div为空,以接收内容

id

我这样构造了<div id="editor"></div>

ActionLink

我的JS函数仅显示模式:

@Ajax.ActionLink(linkText: "Edit",
    actionName: "GetEditor",
    routeValues: new {id = Model.Id},
    ajaxOptions: new AjaxOptions
    {
        OnSuccess = "showEditor",
        UpdateTargetId = "editor",
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "POST"
    })

...只是为了查看是否可以正常使用,我从控制器返回了一个简单的字符串:

function showEditor() { $("#editor").modal("show"); };

编辑1

在我的web.config中,我同时启用了客户端验证和不干扰用户的js:

public ActionResult GetEditor(string id) => Content("Success");

编辑2

我尝试不使用高速缓存(<add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> )刷新而得到相同的结果,并且开发工具未显示JavaScript错误。我在所有浏览器上都得到相同的结果。

我忘记了什么?

3 个答案:

答案 0 :(得分:2)

原来我只是个白痴:

我尝试手动添加不打扰的验证库:

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

...,它开始工作。然后我以为捆绑可能出了点问题-尽管我非常小心地将库保持在正确的顺序。...

bundles.Add(new ScriptBundle("~/bundles/jquery")
  .Include("~/Scripts/jquery-{version}.min.js") 
  .Include("~/Scripts/jquery.unobtrusive-ajax.min"));  // <--- what's missing?

结果是,需要 JavaScript文件的全名

答案 1 :(得分:0)

尝试使用

  

Ctrl + F5

刷新页面,然后重试。

对于Chrome,可能会缓存您捆绑的资源。

F12并查看是否存在JavaScript错误,并进行修复。

尝试通过C#操作返回一个PartialView

答案 2 :(得分:0)

您是否已在web.config中启用它?

<configuration>
    <appSettings>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

编辑:或通过HTML帮助器启用它

HtmlHelper.UnobtrusiveJavaScriptEnabled = true;