MVC $ .getjson trabalha pela primeira vez na página mestre e depois para de ligar para o URL em cargas subsequentes

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma configuração de MVC Masterpage que carrega um menu dinâmico usando os modelos Ajax e JSON - o JSON é devolvido com a seguinte chamada:

var comprimido = []; // Isso contém os dados JSON no retorno de chamada

var getTabs = function () {
    $.getJSON('Home/TabList', null, function (json) {
        Sys.Observer.clear(tabList); 
        Sys.Observer.addRange(tabList, json); 
    });
}

if (tabList == '') { getTabs(); }

Então, isso chama uma função no meu controlador de volta para devolver o 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; }

    }

Isso é usado no seguinte modelo: ligação:

id = "TabTemplate" sys: ATCK = "DataView" class = "sys-template grid_16 topnav" dataView: data = "{{Tablist}}"

Criando os itens do menu usando uma tag de âncora:

sys: href = "{{'/' + controlador + '/' + action + '/'}}" Target = "_ top"

Preparando o texto do menu usando uma propriedade do objeto JSON:

{{Texto}}

Em seguida, anexei esta página mestre a 2 páginas MVC diferentes ("índice" e "About", e Global.asax me leva ao "índice")

Então, isso funciona muito bem na primeira vez que entro na página e o menu é desenhado corretamente, mas quando clico no item de menu sobre o menu que foi gerado no modelo acima com o link "home/about", então ele para de funcionar . O que acontece é que o JavaScript é chamado corretamente (ou seja, chama a função "gettabs" e passa pela chamada getjson), mas na verdade não atinge meu controlador para obter o json (eu coloco um ponto de breking na ação do controlador e é não atingir neste caso).

Estou totalmente perdido e tenho tentado resolver isso há dias. Qualquer ajuda seria muito apreciada.

Obrigado.

Foi útil?

Solução

Eu acho que pode ser porque o seu .getJSON A solicitação está chamando o caminho relativo Home/TabList.

Quando você está na página inicial, por exemplo http://localhost/, a .getJSON solicitação vai ligar http://localhost/Home/TabList que, como você diz, funciona.

Mas então quando você está em uma página subsequente, por exemplo http://localhost/Home/About a .getJSON solicitação vai ligar http://localhost/Home/About/Home/TabList O que, como você diz, não funciona :-)

Enfim, tente chamar o caminho absoluto /Home/TabList

Por exemplo

$.getJSON('/Home/TabList', null, function (json) {

Nota: a barra de avanço extra no começo.

HTHS,
Charles

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top