Проблема с Ajax.Обратные вызовы ActionLink AjaxOptions (ASP.NET MVC 3)
-
22-10-2019 - |
Вопрос
У меня есть 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;
});
});