【发布时间】:2017-10-02 15:52:10
【问题描述】:
我有这样的方法:
[HttpPost]
[ActionName("GetUserData")]
public ActionResult GetUserData()
{
using (var ctx = new myEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
ctx.Configuration.ProxyCreationEnabled = false;
var user = ctx.Users.Include("UserRoles").FirstOrDefault(x => x.UserId == 4);
ctx.Configuration.LazyLoadingEnabled = true;
ctx.Configuration.ProxyCreationEnabled = true;
return Json(new
{
Email = user.Email,
Roles = user.UserRoles
}, JsonRequestBehavior.AllowGet);
}
}
帖子是通过 jQuery 完成的,如下所示:
$.post("/Administrator/GetUserData", function (data) {
console.log(data);
});
我正在尝试写出返回的数据,但是当我编写上述代码时,控制台显示内部错误 500...
如果返回结果是这样的:
return Json(new
{
Email = user.Email
// returning just email for example to see in console..
},JsonRequestBehavior.AllowGet);
仅将电子邮件作为简单的字符串返回可以正常工作,但是当我尝试通过 JSON 将用户的角色作为数组返回时,我会遇到上述问题...
集合 UserRoles 的类型是 ICollection...
我在这里做错了什么?
附:伙计们,我挖出了异常,如下所示:
异常详细信息:System.InvalidOperationException:在序列化 'System.Collections.Generic.HashSet`1[[MyModel.Models.DatabaseConnection.UserRoles, MyEntity, Version=1.0.0.0, Culture 类型的对象时检测到循环引用=中性,PublicKeyToken=null]]'。
【问题讨论】:
-
不相信你需要
,JsonRequestBehavior.AllowGet部分,如果它是一个帖子 -
你得到的 500 错误是什么?
-
你需要返回一个非循环对象。你需要从UsersRole对象得到什么信息?
-
是的..喜欢
Roles = user.UserRoles.Select(a => new {ID = a.ID, RoleName = a.RoleName}).ToList() -
或者你可以创建一个视图模型并填充/返回它
标签: c# jquery asp.net json asp.net-mvc