Ajax.ActionLink AjaxOptions回调问题(ASP.NET MVC 3)

时间:2011-04-27 07:22:27

标签: javascript ajax asp.net-mvc-3 microsoft-ajax actionlink

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。

所以当我处理该函数时,库已经被加载 - 这就是为什么我很困惑。

有什么想法吗?

1 个答案:

答案 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;
    });
});