我有一个 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;
    });
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top