MVC5 Ajax.ActionLink 加载新页面而不是替换
MVC5 Ajax.ActionLink Loads New Page Instead of Replacing
我知道类似的问题已经被多次询问和回答;对于我的生活,我无法确定我缺少什么,请耐心等待。
我正在尝试使用编辑器为页面上的项目加载部分视图,并将该编辑器显示为 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
文件夹包含两个文件:
View
有一个空的div
和正确的id
接收内容
<div id="editor"></div>
我这样构造了ActionLink
:
@Ajax.ActionLink(linkText: "Edit",
actionName: "GetEditor",
routeValues: new {id = Model.Id},
ajaxOptions: new AjaxOptions
{
OnSuccess = "showEditor",
UpdateTargetId = "editor",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
我的 JS 函数只显示模式:
function showEditor() { $("#editor").modal("show"); };
...只是为了看看我是否可以让它工作,我从我的控制器返回一个简单的字符串:
public ActionResult GetEditor(string id) => Content("Success");
编辑 1
在我的 web.config 中,我启用了客户端验证和不显眼的 js:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
编辑 2
我尝试在不使用缓存 (Ctrl+F5
) 的情况下进行刷新,结果相同,开发工具未显示 JavaScript 错误。我在所有浏览器上都得到了相同的结果。
我忘记了什么?
尝试使用
Ctrl + F5
刷新您的页面并重试。
对于 Chrome 可能会缓存您的捆绑资源。
按F12
查看是否有JavaScript错误,如有则修正
尝试在 C# 操作中返回 PartialView
作为结果。
你在 web.config 中启用了吗?
<configuration>
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
编辑:或通过 HTML Helper
启用它
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
原来我只是个白痴:
我尝试手动添加不显眼的验证库:
<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 个文件的全名。
我知道类似的问题已经被多次询问和回答;对于我的生活,我无法确定我缺少什么,请耐心等待。
我正在尝试使用编辑器为页面上的项目加载部分视图,并将该编辑器显示为 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
文件夹包含两个文件:
View
有一个空的div
和正确的id
接收内容
<div id="editor"></div>
我这样构造了ActionLink
:
@Ajax.ActionLink(linkText: "Edit",
actionName: "GetEditor",
routeValues: new {id = Model.Id},
ajaxOptions: new AjaxOptions
{
OnSuccess = "showEditor",
UpdateTargetId = "editor",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
我的 JS 函数只显示模式:
function showEditor() { $("#editor").modal("show"); };
...只是为了看看我是否可以让它工作,我从我的控制器返回一个简单的字符串:
public ActionResult GetEditor(string id) => Content("Success");
编辑 1
在我的 web.config 中,我启用了客户端验证和不显眼的 js:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
编辑 2
我尝试在不使用缓存 (Ctrl+F5
) 的情况下进行刷新,结果相同,开发工具未显示 JavaScript 错误。我在所有浏览器上都得到了相同的结果。
我忘记了什么?
尝试使用
Ctrl + F5
刷新您的页面并重试。
对于 Chrome 可能会缓存您的捆绑资源。
按F12
查看是否有JavaScript错误,如有则修正
尝试在 C# 操作中返回 PartialView
作为结果。
你在 web.config 中启用了吗?
<configuration>
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
编辑:或通过 HTML Helper
启用它HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
原来我只是个白痴:
我尝试手动添加不显眼的验证库:
<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 个文件的全名。