MVC $ .getjson trabalha pela primeira vez na página mestre e depois para de ligar para o URL em cargas subsequentes
-
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.
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