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)
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

Pjava

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar