2

我有一个像这样的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。

所以当我处理那个函数时,库已经加载了——这就是我感到困惑的原因。

有任何想法吗?

4

1 回答 1

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 对它们进行 AJAXify:

$(function() {
    $('#myLink').click(function() {
        $.post(this.href, function(result) {
            // result is already a javascript object, no need to eval
        });
        return false;
    });
});
于 2011-04-27T07:28:30.183 回答