Array
(
)

Jquery, Ajax, MVC e Banco de dados com EF e LINQ

Pjava
   - 26 fev 2014

Como eu faço para trazer do banco de dados uma relação de nomes e montar um menu simples, mas usando Jquery com Ajax e mvc 4. Eis minha query que está retornando corretamente. A LINQ está trazendo os resultados corretamente. Só não estou conseguindo pegar na página com JQuery e Ajax.
#Código

[HttpPost]
        public JsonResult MontaMenuInstitucional()
        {
            AgaxturCmsEntities db = new AgaxturCmsEntities();
            try
            {
                var resultado =
                    (from i in db.TB_INSTITUCIONAL
                     join c in db.TB_INSTITUCIONAL_CATEGORIAS on i.Id_Categoria equals(c.id)
                     where i.Ativo == 1 && c.Ativo == 1 && c.CdCliente == 1
                     select new
                     {
                         i.Id_Categoria
                         ,i.Conteudo
                         ,c.Categoria
                     }).ToList();

                return Json(new { resultado }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new { Result = ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }

Abaixo minha jquery que não funciona.
#Código
function MontaMenuInstitucional() {

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

                    alert('cheguei ao passo 0');

                    $(data.Result).each(function () {

                        alert('cheguei ao passo 1');

                        if (this.Id_Categoria > 0) {

                            alert('cheguei ao passo 2');

                            $("CategoriaInstitucional").append('<li><a href="#" title="' + this.Categoria + '" alt="" /></a></li>');
                        }

                        
                    });
                    //processoSliderBanner();

                },
                error: function (error) {

                }
            });
        }

Pjava
   - 27 fev 2014

Alterei o JQuer e coloquei dois alerts(Passo 0 e Passo 1). No passo 0 eu consigo chegar, mas não entra no passo 1. Abaixo meu código. Não estou conseguindo debugar isso no IE 9 ou 10, sei lá qual a versão, mas está bem diferente das versões anteriores( 8 ou menor).

#Código

function MontaMenuInstitucional() {

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

                    alert('Passo 0');

                    var resultSet = $.parseJSON(data.d);
                    $.each(resultSet, function (key, obj) {

                        alert('passo 1');

                        obj.Categoria;
                    });

                },
                error: function (error) {

                }
            });
        }

Murilo Teixeira
   - 27 fev 2014

Tenta dar uma olhada nessa linha:

#Código

 $("CategoriaInstitucional").append('<li><a href="#" title="' + this.Categoria + '" alt="" /></a></li>');


Você fecha a Tag <a> duas vezes, primeiro no /> depois no </a>
Você tentou algo mais simples, como simplesmente emitir um alerta com o valor que você quer mostrar pra ver se esta vindo certo?

um alert com o this.Categoria?

Pjava
   - 27 fev 2014

Clique na imagem para abrir em uma nova janela
Esse erro só está acontecendo após eu ter alterado minha função jquery com ajax.

Pjava
   - 27 fev 2014

Uma eu resolvi. A variável que retorna o json estava com nome errado no jquery. Era resultado e eu coloquei Result. Isso eu corrigi, agora não estou conseguindo é montar o Menu na página, dessa forma.

if (this.Id_Categoria > 0) {

$("CategoriaInstitucional").append('<li><a href="#" title="' + this.Categoria + '" alt="" /></li>');
}

Abaixo meu código asp.net da tag ul com sua tags li

<ul class="grid_4">
<li>Institucional</li>
@*<li><a href="#" title="">Nossa História</a></li>
<li><a href="#" title="">Linha do Tempo</a></li>
<li><a href="#" title="">Missão e Valores</a></li>
<li><a href="#" title="">Imprensa</a></li>
<li><a href="#" title="">Sustentabilidade</a></li>
<li><a href="#" title="">Trabalhe Conosco</a></li>*@
</ul>

Onde está comentado é que deveria vir do jquery para preencher.

Pjava
   - 27 fev 2014

Resolvido. Faltou eu dizer o que mostrar. Eu estva apenas carregando o Title e não mostrar na página. Assim ficou todo me código para quem desejar ou precisar.
#Código

function MontaMenuInstitucional() {

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

                    $(data.resultado).each(function () {

                        if (this.Id_Categoria > 0) {

                            $("#CategoriaInstitucional").append('<li><a href="#" title="' + this.Categoria + '" alt="" >' + this.Categoria + '</a></li>');
                        }
                        });
                },
                error: function (error) {

                }
            });
        }


#Código
<ul class="grid_4" id="CategoriaInstitucional">
                            <li>Institucional</li>
                        </ul>