Principales respuestas
CRUD con MVC 5 json y ajax

Pregunta
-
Buenas Tardes.
Tengo un problema que no puedo resolverlo. espero su ayuda soy nuevo en este lenguaje.
Este es mi controlador.
using System.Net; using System.Web; using System.Web.Mvc; using RecordGeneral.Models; namespace RecordGeneral.Controllers { public class TABRegpController : Controller { private RecordGeneralContext db = new RecordGeneralContext(); public ActionResult Index() { return View(); } public ActionResult GetIndex() { var tblTABRegp = db.TABTRegps.ToList(); return Json(tblTABRegp, JsonRequestBehavior.AllowGet); }
Este es mi vista.
@model IEnumerable<RecordGeneral.Models.TABTRegp> @{ ViewBag.Title = "Index"; } <h2><span class="nuevo_lb">REGIMEN</span></h2> <p> <button type="button" id="btnCreate" class="btn btn-info btn-sm" data-toggle="modal" data-target="#TABRegpModal"> Adicionar </button> </p> <table id="listTABRegp" class="table "> <thead> <tr> <th>CODIGO</th> <th>DESCRIPCION</th> </tr> </thead> <tbody></tbody> </table>
y este la función Ajax.
$(document).ready(function () { loadData(); }); var isUpdateable = false; function loadData() { $.ajax({ url: '/TABRegp/GetIndex/', type: 'GET', dataType: 'json', success: function (data) { var rows = ''; $.each(data, function (i, item) { rows += "<tr>" rows += "<td>" + item.RGPCodi + "</td>" rows += "<td>" + item.RGPDesc + "</td>"; rows += "</tr>"; $("#listTABRegp tbody").html(rows); }); }, error: function (err) { alert("Error: " + err.responseText); } }); }
al ejecutar el aplicativo,me sale la pantalla que adjunto.
No se cual es el error que estoy cometiendo ya tengo varios días con esto. espero que me ayuden.
Gracias.
- Editado Sergio ParraModerator lunes, 8 de mayo de 2017 10:42 formatear codigo fuente
Respuestas
-
hola
No deberias devolver la entidad de EF como respuesta json ya que este se relaciona con otras trablas y genera este problema de referencia circular
deberias crear una clase model que devuelvas
la idea es crear una clase en la carpeta Model
public class TABTRegpModel { public string RGPCodi {get;set;} public string RGPDesc {get;set;} }
y luego realices el mapping entre los datos de EF devuelve y la clase que retorna como json
public ActionResult GetIndex() { var tblTABRegp = db.TABTRegps.ToList(); Mapper.CreateMap<TABTRegp, TABTRegpModel>(); var model = Mapper.Map<TABTRegpModel>(tblTABRegp); return Json(model, JsonRequestBehavior.AllowGet); }
sino quieres usar automapper podrias usar linq
public ActionResult GetIndex() { var tblTABRegp = db.TABTRegps.ToList(); var result = tblTABRegp.Select(x=> new { RGPCodi = x.RGPCodi, RGPDesc = x.RGPDesc }); return Json(result, JsonRequestBehavior.AllowGet); }
pero remarco NUNCA devuelvas el objeto de EF directo como json
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta jgbaz viernes, 19 de mayo de 2017 23:34
Todas las respuestas
-
Tiene toda la pinta de ser un problema con el modelo de entidades que se usa internamente cuando llamas a db.TABTRegps. Revisa las clases del modelo por si existe alguna referencia circular (es decir la clase A contiene un miembro de tipo B, y la clase B contiene uno de tipo A).
-
hola
No deberias devolver la entidad de EF como respuesta json ya que este se relaciona con otras trablas y genera este problema de referencia circular
deberias crear una clase model que devuelvas
la idea es crear una clase en la carpeta Model
public class TABTRegpModel { public string RGPCodi {get;set;} public string RGPDesc {get;set;} }
y luego realices el mapping entre los datos de EF devuelve y la clase que retorna como json
public ActionResult GetIndex() { var tblTABRegp = db.TABTRegps.ToList(); Mapper.CreateMap<TABTRegp, TABTRegpModel>(); var model = Mapper.Map<TABTRegpModel>(tblTABRegp); return Json(model, JsonRequestBehavior.AllowGet); }
sino quieres usar automapper podrias usar linq
public ActionResult GetIndex() { var tblTABRegp = db.TABTRegps.ToList(); var result = tblTABRegp.Select(x=> new { RGPCodi = x.RGPCodi, RGPDesc = x.RGPDesc }); return Json(result, JsonRequestBehavior.AllowGet); }
pero remarco NUNCA devuelvas el objeto de EF directo como json
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta jgbaz viernes, 19 de mayo de 2017 23:34