Ajax.ActionLink AjaxOptions回调的问题(ASP.NET MVC 3)
-
22-10-2019 - |
题
我有一个 Ajax.ActionLink
内部 PartialView
像这样:
@Ajax.ActionLink(Model.IsVisible ? "Disable" : "Enable", "ToggleVisibility", "Review", new { area = "Admin", id = Model.Id }, new AjaxOptions { HttpMethod = "POST", OnComplete = "onComplete_AdminReviewOption" })
以及处理JavaScript函数(目前在主视图上串联在线声明):
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = ajaxContext.get_object();
}
引发JavaScript错误:
Object# has not definition for get_object()
.
我认为这些JavaScript方法是 MicrosoftAjax.js
/ MicrosoftMvcAjax.js
脚本,我的页面都包含在其中。
谁能确认存在这些助手方法的哪个库?
我在我的 Layout.cshtml
文件,然后我进行AJAX调用以渲染上述部分视图。
因此,当我处理该功能时,库已经已经加载了 - 这就是IM感到困惑的原因。
有任何想法吗?
解决方案
看起来您正在使用ASP.NET MVC 3和Razor。在此版本中,jQuery是默认客户端脚本框架。不再 MicrosoftAjax.js
(感谢上帝)。所以:
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = eval(ajaxContext);
}
也不要忘记包括 jquery.unobtrusive-ajax.js
.
如果您想使用旧的东西,可以通过在web.config中设置以下内容:
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
默认情况下,此变量设置为true。
我个人更喜欢使用标准链接:
@Html.ActionLink(
Model.IsVisible ? "Disable" : "Enable", // <-- this should probably be as a property directly in the view model, ex. Model.LinkText
"ToggleVisibility",
"Review",
new { area = "Admin", id = Model.Id },
new { id = "myLink" }
)
并在单独的JavaScript文件中使用jQuery ajax对它们进行审查:
$(function() {
$('#myLink').click(function() {
$.post(this.href, function(result) {
// result is already a javascript object, no need to eval
});
return false;
});
});
不隶属于 StackOverflow