Usuário com melhor resposta
Internal Server Error, Return Json

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?
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
-
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
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
-
-
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'."
-
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
-
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!