Problema con Ajax.ActionLink AjaxOptions callback (ASP.NET MVC 3)
-
22-10-2019 - |
Domanda
Ho un Ajax.ActionLink
all'interno di un PartialView
in questo modo:
@Ajax.ActionLink(Model.IsVisible ? "Disable" : "Enable", "ToggleVisibility", "Review", new { area = "Admin", id = Model.Id }, new AjaxOptions { HttpMethod = "POST", OnComplete = "onComplete_AdminReviewOption" })
E la funzione JavaScript movimentazione (dichiarata in-line sul principale View per ora):
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = ajaxContext.get_object();
}
Il che genera un errore di javascript:
Object# has not definition for get_object()
.
ho pensato questi metodi JavaScript facevano parte degli script MicrosoftAjax.js
/ MicrosoftMvcAjax.js
, entrambi i quali ho inserito nella mia pagina.
Qualcuno può confermare quale libreria questi metodi di supporto sono presenti?
passo per caricare gli script necessari nel mio file Layout.cshtml
, poi faccio una chiamata AJAX per rendere il sopra PartialView.
Quindi, per il momento mi occupo di quella funzione, le librerie sono già caricati -. Che è il motivo per im confuso
Tutte le idee?
Soluzione
Sembra che si sta utilizzando ASP.NET MVC 3 e Razor. In questa versione jQuery è il quadro del client di script predefinito. Non più MicrosoftAjax.js
(grazie a Dio). Quindi:
function onComplete_AdminReviewOption(ajaxContext) {
var jsonObject = eval(ajaxContext);
}
Inoltre, non dimenticare di includere jquery.unobtrusive-ajax.js
.
Se si desidera utilizzare la roba legacy si potrebbe impostando la seguente nel web.config:
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
Per impostazione predefinita, questa variabile è impostata su true.
Personalmente preferisco utilizzare collegamenti standard:
@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" }
)
e AJAXify utilizzando jQuery in un file JavaScript distinto:
$(function() {
$('#myLink').click(function() {
$.post(this.href, function(result) {
// result is already a javascript object, no need to eval
});
return false;
});
});