Проблема с обратными вызовами Ajax.ActionLink AjaxOptions (ASP.NET MVC 3) - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть 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 Ответ

2 голосов
/ 27 апреля 2011

Похоже, вы используете 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" }
)

и AJAXify их, используя jQuery в отдельном файле javascript:

$(function() {
    $('#myLink').click(function() {
        $.post(this.href, function(result) {
            // result is already a javascript object, no need to eval
        });
        return false;
    });
});
...