MVC $ .getjson fonctionne la première fois sur la page maître, puis arrête d'appeler URL sur les charges suivantes

StackOverflow https://stackoverflow.com/questions/1917553

  •  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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top