none
Novamente problemas com jquery, ajax e bd RRS feed

  • Pergunta

  • Fiz um join com duas tabelas para popular um menu em uma pagina web. Bem, na tabela mãe eu possuo registros únicos e na filha, claro tenho vários registros para um nregistro da mãe. Até aí beleza. Quando eu trago no join, digamos 12 registros(minha realidade atual), que equivalem a x registros para cada um na mãe. Isso está correto. Bem, o que passa é na função jquery, eu não estou conseguindo popular o campo mãe(título do menu), devido a essa situação no retorno da função, pois ela traz vários registros e eu só preciso de um. Bem não sei se é isso. Veja a query e minha jquery.

    [HttpPost]
            public JsonResult MontaMenuInferior()
            {
                AgaxturCmsEntities db = new AgaxturCmsEntities();
                try
                {
                    var resultado =
                        (from c in db.TB_MENUSUPERIOR_CATEGORIAS
                         join s in db.TB_MENUSUPERIOR_SUBCATEGORIAS on c.id equals (s.Id_Categoria)
                         where c.Ativo == 1 && s.Ativo == 1 && s.CdCliente == 1
                         select new
                         {
                             c.id
                             ,c.Categoria
                             ,s.Id_Categoria
                             ,s.SubCategoria
                         }).ToList();

                    return Json(new { resultado }, JsonRequestBehavior.AllowGet);
                }
                catch (Exception ex)
                {
                    return Json(new { resultado = ex.Message }, JsonRequestBehavior.AllowGet);
                }
            }
    Agora minha jquery e o html que vai ser populado.

    function MontaMenuInferior() {

                $.ajax({
                    url: '/Home/MontaMenuInferior',
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    type: "POST",
                    success: function (data) {
                       
                        $(data.resultado).each(function () {

                            alert(this.id);

                            if (this.Id == 2) {
                                $("#americasul").append('<li><a href="#" title="' + this.Categoria + '" alt="" >' + this.Categoria + '</a></li>');
                                if (this.Id_Categoria == this.Id) {
                                    $("#americasul").append('<li><a href="#" title="' + this.SubCategoria + '" alt="" >' + this.SubCategoria + '</a></li>');
                                }
                            }

                            if (this.Id == 6) {
                                alert(this.Id);
                                $("#brasil").append('<li><a href="#" title="' + this.Categoria + '" alt="" >' + this.Categoria + '</a></li>');
                                if (this.Id_Categoria == this.Id) {
                                    $("#brasil").append('<li><a href="#" title="' + this.SubCategoria + '" alt="" >' + this.SubCategoria + '</a></li>');
                                }
                            }
                        });
                    },
                    error: function (error) {

                    }
                });
            }

    Meu html

    <ul class="grid_4" id="brasil">
                              
                            </ul>
                            <ul class="grid_4" id="americasul">
                                
                            </ul>
    quinta-feira, 27 de fevereiro de 2014 16:16

Todas as Respostas

  • Tentei fazendo uma subquery, porem estou com um problema. Preciso retornar na sub, todos os elementos equivalentes na tabela principal. Se eu coloco um ToList() no final da subquery, não retorna nada. Coloquei um FirstOrDefault, retornou certo, mas apenas um registro(o primeiro, claro). Como eu faço para resolver isso? Abaixo minha linq com subquery.

    [HttpPost]
            public JsonResult MontaMenuInferior()
            {
                AgaxturCmsEntities db = new AgaxturCmsEntities();
                try
                {
                    var resultado =
                        (from c in db.TB_MENUSUPERIOR_CATEGORIAS
                         //join s in db.TB_MENUSUPERIOR_SUBCATEGORIAS on c.id equals (s.Id_Categoria)
                         where c.Ativo == 1
                         select new
                         {
                             c.id
                             ,c.Categoria
                             ,sub = (from s in db.TB_MENUSUPERIOR_SUBCATEGORIAS where s.Id_Categoria == c.id
                                     && s.Ativo == 1 && s.CdCliente == 1
                                        select new { s.Id_Categoria, s.SubCategoria }) ==>> NESSE PONTO NÃO SEI O QUE COLOCAR
                         }).ToList();

                    return Json(new { resultado }, JsonRequestBehavior.AllowGet);
                }
                catch (Exception ex)
                {
                    return Json(new { resultado = ex.Message }, JsonRequestBehavior.AllowGet);
                }
    quinta-feira, 27 de fevereiro de 2014 16:50
  • function MontaMenuInferior() {

        var str = "";
        $.ajax({
            url: '/Home/MontaMenuInferior',
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            type: "POST",
            success: function (data) {
                       
                $(data.resultado).each(function () {

                    str = str + '<ul class="grid_4">' +
                                        '<li>' + this.Categoria + '</li>';
                                           

                    $(this.subconsulta).each(function () {

                        str = str + '<li><a href="#" title="">' + this.SubCategoria + '</a></li>';
                    });

                    str = str + '</ul>';

                    $('#menufooter').append(str);

                    str = "";
                           
                });
            },
            error: function (error) {

            }
        });
    }
    sexta-feira, 28 de fevereiro de 2014 11:20