Вопрос

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

Таким образом, к тому времени, когда я обрабатываю эту функцию, библиотеки уже загружены - вот почему я в замешательстве.

Есть какие-нибудь идеи?

Это было полезно?

Решение

Похоже, вы используете 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;
    });
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top