none
Internal Server Error, Return Json RRS feed

  • Pergunta

  • Tenho uma requisição GET que está retornando o erro 500.. o internal... Vejam o que quero fazer:

    ActionResult

             //
            //GET: Consulta/CarregaMedico
            [Authorize(Roles = "RespClinica")]
            public ActionResult CarregaMedico(int id)
            {
                try
                {
                    var data = _unitOfWork.MedicoRepositorio.Get(m => m.EspecialidadeId == id);
    
                    return Json(new {data}, JsonRequestBehavior.AllowGet);
    
                }
                catch (Exception)
                {
                    return RedirectToAction("Agendar");
                }
                finally
                {
                    _unitOfWork.Dispose();
                }
            }

    JavaScript

    function carregaMédico() {
        var options = '';
        $.getJSON("../Consulta/CarregaMedico", {
            id: jQuery("#Especialidade").val()
        },
               function (data) {
                   for (var i = 0; i < data.length; i++) {
    
                       options += '<option value="' + data[i].UserId.toString() + '">' + data[i].Nome.toString() + ' ' + data[i].Sobrenome.toString() + '</option>';
                   }
                   jQuery("#MedicosEncontrados").html(options);
               });
    };
    Carregar um select <option a partir de uma consulta que retorna um json...

    Alguém sabe onde pode estar o erro?

    terça-feira, 23 de abril de 2013 21:28

Respostas

  • Debug o código e verifique se está entrando no método, se tiver entrando, muito provável que na hora de renderizar a lista para json está ocorrendo um erro devido ao lazyload, sua lista tem algum objeto que contém uma referencia a outro objeto e esse tem referencia a outros objetos.

    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta JonatasArantes terça-feira, 23 de abril de 2013 22:58
    terça-feira, 23 de abril de 2013 22:55
  • Você pode trabalhar com ViewModel, ou até mesmo retornar uma coleção de SelectListItem

    var data = _unitOfWork.MedicoRepositorio.Get(m => m.EspecialidadeId == id).Select(x => new SelectListItem(){ Value = x.UserId, Text = x.Nome+" "+x.SobreNome);


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta JonatasArantes terça-feira, 23 de abril de 2013 23:18
    terça-feira, 23 de abril de 2013 23:08

Todas as Respostas

  • Debug o código e verifique se está entrando no método, se tiver entrando, muito provável que na hora de renderizar a lista para json está ocorrendo um erro devido ao lazyload, sua lista tem algum objeto que contém uma referencia a outro objeto e esse tem referencia a outros objetos.

    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta JonatasArantes terça-feira, 23 de abril de 2013 22:58
    terça-feira, 23 de abril de 2013 22:55
  • Sim, dentro da lista de médicos há uma lista de agendamentos...Como posso resolver esse problema? No debug está entrando correto, somente na hora de retornar que está dando erro.
    terça-feira, 23 de abril de 2013 23:00
  • Coloquei o link direto no navegador para rastreio da pilha e deu o seguinte erro:

    "Foi detectada uma referência circular ao serializar um objeto do tipo 'System.Data.Entity.DynamicProxies.UsuarioMedico_8C15C2C8BEF39B5918F0D029287D5C96A0226C214B60F4D6002945E9BA7FB638'."

    terça-feira, 23 de abril de 2013 23:06
  • Você pode trabalhar com ViewModel, ou até mesmo retornar uma coleção de SelectListItem

    var data = _unitOfWork.MedicoRepositorio.Get(m => m.EspecialidadeId == id).Select(x => new SelectListItem(){ Value = x.UserId, Text = x.Nome+" "+x.SobreNome);


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta JonatasArantes terça-feira, 23 de abril de 2013 23:18
    terça-feira, 23 de abril de 2013 23:08
  • Resolvi, ficou muito parecido com o seu Marco. Veja:
     //
            //GET: Consulta/CarregaMedico
            [HttpGet]
            [Authorize(Roles = "RespClinica")]
            public JsonResult CarregaMedico(int id)
            {
                try
                {
                    var medicos = _unitOfWork.MedicoRepositorio.Get(m => m.EspecialidadeId == id);
                    var data = medicos.Select(m => new {m.UserId, m.Nome, m.Sobrenome}).ToList();
                    return Json(new {Result = data}, JsonRequestBehavior.AllowGet);
    
                }
                catch (Exception)
                {
                    throw new Exception();
                }
            }
    Valew. Abraço!
    terça-feira, 23 de abril de 2013 23:19