Problema com lógica para preencher um html dinamicamente
06/03/2014
0
Esses são meus métodos do controller. Nesse primeiro eu carrego o conteúdo do html, de acordo com o ID passado(_parametro)
Esse outro método eu monto o menu
Esse é o body do HTML que vai na página a ser chamada no link
Esse é meu jquery para fazer tudo isso funcionar. É aí que está o problema. Minha lógica errada, está praticamente aí. Se não toda, quase toda.
O Menu está sendo montado corretamente. Quando o menu é montado ele cria uns links para chamar a PaginaMenuBase e nela, jogar o HTML do banco(Conteudo). Isso não está acontecendo. Está vindo todos os HTML's de uma vez e não apenas o passado pelo parâmetro. Qualquer ajuda é bem-vinda.
public ActionResult PaginaBaseMenu(int Parametro) { AgaxturCmsEntities db = new AgaxturCmsEntities(); int _parametro = Parametro; try { var menu_sup = (from rc in db.TB_MENUSUPERIOR join c in db.TB_MENUSUPERIOR_CATEGORIAS on rc.Id_Categoria equals (c.id) join s in db.TB_MENUSUPERIOR_SUBCATEGORIAS on rc.Id_SubCategoria equals (s.id) join s2 in db.TB_MENUSUPERIOR_SUBCATEGORIAS2 on rc.Id_SubCategoria2 equals (s2.id) where rc.Ativo == 1 && rc.Cdcliente == 1 && rc.Id_Categoria == _parametro select new { Conteudo = rc.Conteudo }).FirstOrDefault(); ViewData["htmlBaseMenu"] = menu_sup.Conteudo; return View(); } catch (Exception ex) { string e = ex.Message; } return View(); }
Esse outro método eu monto o menu
[HttpPost] public JsonResult MontaMenuSuperiorDestino() { AgaxturCmsEntities db = new AgaxturCmsEntities(); try { var resultado = (from c in db.TB_MENUSUPERIOR_CATEGORIAS //join s in db.TB_MENUSUPERIOR on c.id equals (s.Id_Categoria) //join s2 in db.TB_MENUSUPERIOR_SUBCATEGORIAS2 on s.id equals(s2.Id_SubCategoria) where c.Ativo == 1 && c.CdCliente == 1 select new { c.id, c.Categoria, cont = (from rc in db.TB_MENUSUPERIOR join cat in db.TB_MENUSUPERIOR_CATEGORIAS on rc.Id_Categoria equals(c.id) //join s in db.TB_MENUSUPERIOR_SUBCATEGORIAS on rc.Id_SubCategoria equals(s.id) //join s2 in db.TB_MENUSUPERIOR_SUBCATEGORIAS2 on rc.Id_SubCategoria2 equals(s2.id) where rc.Ativo == 1 && rc.Cdcliente == 1 select new { rc.Conteudo, rc.Id_Categoria, rc.Id_SubCategoria2 }).ToList(), subconsulta = (from sub in db.TB_MENUSUPERIOR_SUBCATEGORIAS where sub.Ativo == 1 && sub.CdCliente == 1 && sub.Id_Categoria == c.id select new { sub.Id_Categoria, sub.SubCategoria, subconsulta2 = (from sub2 in db.TB_MENUSUPERIOR_SUBCATEGORIAS2 where sub2.Ativo == 1 && sub2.CdCliente == 1 && sub2.Id_SubCategoria == sub.id select new { sub2.Id_SubCategoria, sub2.SubCategoria2 } ).ToList() } ).ToList(), }).ToList(); return Json(new { resultado }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { resultado = ex.Message }, JsonRequestBehavior.AllowGet); } }
Esse é o body do HTML que vai na página a ser chamada no link
@(new HtmlString(ViewData["htmlBaseMenu"].ToString()))
Esse é meu jquery para fazer tudo isso funcionar. É aí que está o problema. Minha lógica errada, está praticamente aí. Se não toda, quase toda.
function MontaMenuSuperiorDestino() { var str = "", _conteudo = ""; var id_cat = 0, idx = 0, id_cat = 0, id_sub2 = 0; $.ajax({ url: '/Home/MontaMenuSuperiorDestino', dataType: "json", contentType: "application/json; charset=utf-8", type: "POST", success: function (data) { $(data.resultado).each(function () { //str = str + '<li><a href="#" title="">' + this.Categoria + '</a><div class="container_24 dropdown-menu">'; idx = this.id; $(this.cont).each(function () { id_cat = this.Id_Categoria; id_sub2 = this.Id_SubCategoria2; _conteudo = this.Conteudo; }); if (id_cat == idx && id_sub2 == null) str = str + '<li><a href="Home/PaginaBaseMenu/' + id_cat + '"title="">' + _conteudo + '</a><div class="container_24 dropdown-menu">'; else str = str + '<li><a href="#" title="">' + this.Categoria + '</a><div class="container_24 dropdown-menu">'; $(this.subconsulta).each(function () { str = str + '<ul class="grid_4"><li>' + this.SubCategoria + '</li>'; $(this.subconsulta2).each(function () { if (id_sub2 > 0) str = str + '<li><a href="Home/PaginaBaseMenu/' + id_sub2 + '" title="">' + this.SubCategoria2 + '</a></li>'; }); str = str + '</ul>'; }); str = str + '</div></li>'; $("#menuheader").append(str); str = ""; }); }, error: function (error) { } }); }
O Menu está sendo montado corretamente. Quando o menu é montado ele cria uns links para chamar a PaginaMenuBase e nela, jogar o HTML do banco(Conteudo). Isso não está acontecendo. Está vindo todos os HTML's de uma vez e não apenas o passado pelo parâmetro. Qualquer ajuda é bem-vinda.
Pjava
Curtir tópico
+ 0
Responder
Posts
07/03/2014
Pjava
Deixa eu explicar melhor. São 4 tabelas no BD para esse menu. Vou chamar de Tab1,Tba2,Tab3 e Tab4, ok? Em Tab1 eu tenho o HTML e carrego também as chaves de Tab2 e Tab4. Tab2 será montado o MENU principal, que fica visível na parte superior qdo a página for carregada. Lá eu tenho esses campos:
id e Categoria. Categoria é que será mostrado no menu. Se são 5, o menu terá 5 itens e assim por diante;. Essa é a Tab2.
Na Tab3 eu tenho id, id_categoria(id de Tab2) e subcategoria, que será exibido com submenu do Menu principal. Nesse nível não teremos link.
Na Tab4, temos id, id_categoria(id de Tab2), id_subcategoria(id de Tab3) e SubCategoria2, que é o que será mostrado no segundo nível da Menu. Esse terá link.
Esses links é que chamarão a PaginaBase e prencherá com o HTML que está no BD, na tabela Tab1. Na Tab1 eu tenho id, id_categoria e id_categoria2 e o campo Conteudo que é o HTML. Estou tendo dificuldades de montar uma Jquery que preencha os MENU e monte o link certo, ou seja, se em Tab1 o campo id_subcategorai2 estiver diferente de NULL, então carregue na PaginaBase o HTML contendo esse ID e assim sucessivamente. Não sei se fui claro. Estou aceitando sugestão.
id e Categoria. Categoria é que será mostrado no menu. Se são 5, o menu terá 5 itens e assim por diante;. Essa é a Tab2.
Na Tab3 eu tenho id, id_categoria(id de Tab2) e subcategoria, que será exibido com submenu do Menu principal. Nesse nível não teremos link.
Na Tab4, temos id, id_categoria(id de Tab2), id_subcategoria(id de Tab3) e SubCategoria2, que é o que será mostrado no segundo nível da Menu. Esse terá link.
Esses links é que chamarão a PaginaBase e prencherá com o HTML que está no BD, na tabela Tab1. Na Tab1 eu tenho id, id_categoria e id_categoria2 e o campo Conteudo que é o HTML. Estou tendo dificuldades de montar uma Jquery que preencha os MENU e monte o link certo, ou seja, se em Tab1 o campo id_subcategorai2 estiver diferente de NULL, então carregue na PaginaBase o HTML contendo esse ID e assim sucessivamente. Não sei se fui claro. Estou aceitando sugestão.
Responder
Clique aqui para fazer login e interagir na Comunidade :)