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调用来渲染上面的PartialView。
所以当我处理该函数时,库已经被加载 - 这就是为什么我很困惑。
有什么想法吗?
答案 0 :(得分:2)
看起来您正在使用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;
});
});