MVC $ .getjson fonctionne la première fois sur la page maître, puis arrête d'appeler URL sur les charges suivantes
-
20-09-2019 - |
Question
J'ai une configuration MVC MasterPage qui charge un menu dynamique à l'aide de modèles AJAX et JSON - le JSON est retourné avec l'appel suivant:
var tablist = []; // Cela contient les données JSON sur le rappel
var getTabs = function () {
$.getJSON('Home/TabList', null, function (json) {
Sys.Observer.clear(tabList);
Sys.Observer.addRange(tabList, json);
});
}
if (tabList == '') { getTabs(); }
Donc, cela appelle une fonction sur mon HomeController pour retourner JSON:
public JsonResult TabList()
{
//get tabs
... //call code to get tabs - removed for ease of reading this question
JsonResult jsonTabs = Json(tabItems);
jsonTabs.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonTabs;
}
catch (Exception ex)
{ throw ex; }
}
Ceci est utilisé dans le modèle suivant: Liaison:
id = "tabTemplate" sys: attach = "dataView" class = "sys-template grid_16 topnav" dataView: data = "{{tablist}}"
Création des éléments de menu à l'aide d'une balise d'ancrage:
sys: href = "{{'/' + contrôleur + '/' + action + '/'}}" cible = "_ TOP"
Remplissage du texte du menu à l'aide d'une propriété à partir de l'objet JSON:
{{Texte}}
J'ai ensuite joint cette page maître à 2 pages MVC différentes ("index" et "À propos", et Global.asax m'emmène à "index")
Donc, cela fonctionne très bien la première fois que je vais sur la page, et le menu est correctement dessiné, mais lorsque je clique sur l'élément de menu à propos qui a été généré dans le modèle ci-dessus avec le lien "Home / About", puis il cesse de fonctionner . Ce qui se passe, c'est que le javascript est appelé correctement (c'est-à-dire qu'il appelle la fonction "getTabs" et passe par l'appel getjson) mais il ne frappe pas réellement mon contrôleur pour obtenir le JSON (j'ai mis un brekpoint sur l'action du contrôleur et c'est pas frappé dans ce cas).
Je suis totalement à court et j'ai essayé de résoudre ce problème depuis des jours. Toute aide serait grandement appréciée.
Merci.
La solution
Je pense que c'est peut-être parce que votre .getJSON
La demande appelle le chemin relatif Home/TabList
.
Lorsque vous êtes sur la page d'accueil, par exemple http://localhost/
, la .getJSON
La demande appellera http://localhost/Home/TabList
Ce qui, comme vous le dites, fonctionne.
Mais ensuite, lorsque vous êtes sur une page suivante, par exemple http://localhost/Home/About
la .getJSON
La demande appellera http://localhost/Home/About/Home/TabList
Ce qui, comme vous le dites, ne fonctionnera pas :-)
Quoi qu'il en soit, essayez d'appeler le chemin absolu /Home/TabList
Par exemple
$.getJSON('/Home/TabList', null, function (json) {
Remarque: la barre oblique supplémentaire au début.
Hths,
Charles