Problème avec Ajax.ActionLink AjaxOptions Callbacks (ASP.NET MVC 3)
-
22-10-2019 - |
Question
J'ai un Ajax.ActionLink
dans un PartialView
comme ceci:
@Ajax.ActionLink(Model.IsVisible ? "Disable" : "Enable", "ToggleVisibility", "Review", new { area = "Admin", id = Model.Id }, new AjaxOptions { HttpMethod = "POST", OnComplete = "onComplete_AdminReviewOption" })
Et la fonction JavaScript de manutention (déclarée sur l'écran principal pour l'instant en ligne):
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = ajaxContext.get_object();
}
Ce qui renvoie une erreur javascript:
Object# has not definition for get_object()
.
Je pensais que ces méthodes JavaScript faisaient partie des MicrosoftAjax.js
/ scripts MicrosoftMvcAjax.js
, les deux que j'ai inclus sur ma page.
Quelqu'un peut-il confirmer quelle bibliothèque ces méthodes d'assistance sont présents?
Je charge les scripts nécessaires dans mon fichier Layout.cshtml
, alors je fais un appel AJAX pour rendre le dessus PartialView.
Le temps que je manipule cette fonction, les bibliothèques déjà chargées -. Ce qui est la raison pour laquelle im confus
Toutes les idées?
La solution
Il semble que vous utilisez ASP.NET MVC 3 et Razor. Dans cette version jQuery est le cadre de script client par défaut. Plus MicrosoftAjax.js
(Dieu merci). Donc:
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = eval(ajaxContext);
}
De plus, ne pas oublier d'inclure jquery.unobtrusive-ajax.js
.
Si vous voulez utiliser les trucs de l'héritage que vous pourriez en réglant les éléments suivants dans votre web.config:
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
Par défaut, cette variable est définie sur true.
Personnellement, je préfère utiliser des liens standards:
@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" }
)
et AJAXify les utiliser jQuery dans un fichier JavaScript distinct:
$(function() {
$('#myLink').click(function() {
$.post(this.href, function(result) {
// result is already a javascript object, no need to eval
});
return false;
});
});