无法将数据从 Action Controller 发送到 AJAX Caller,序列化动态代理的上下文模型 属性

Failing to send data from Action Controller to AJAX Caller ,Serializing context model of a dynamic proxy property

我正在尝试将从上下文收集的查询数据发送回具有以下状态的 ajax 调用者

1-源码服务器端查询数据成功。 2-如果使用HTTPPOST或HTTPGET,源代码服务器端成功发送数据 3-源代码没有异常或错误 4-applying JSON(queried object) 方法没有改变 场景如下:- 使用 ajax 调用如下

$.ajax({
                    type: "POST",
                    url: '@Url.Action("MainCatItems", "Cachier")',
                    contentType: "application/json; charset=utf-8",
                    data: datas,
                    dataType: "json",
                    success: successFunc,
                    error: function (xhr) {
                        alert('Error: ' + xhr.statusText);
                    },
                });

调用动作控制器

[HttpPost]
    public ActionResult MainCatItems(int mainCatNo)
    {
        var results = ......//fetching data from Context
        return Json(new { data = results }, JsonRequestBehavior.AllowGet);
    }

,调用成功将我的参数发送到操作,但是将响应发送回控制器的 ajax 调用有点令人困惑,因为我有两种情况:

第一个:(完美运行) 我正在返回从我的 Entity Framework (RegisterNotification Class)

中的 table class 查询的数据
public partial class RegisterNotification
{
    //setters and getters
}

这是一个单一的 class,里面没有声明导航 属性

第二个(问题出在哪里。) 我正在返回从我的 Entity Framework 中的 table class 查询的数据 (项目 Class"partial class")

第一部分:-

public *partial* class Item
{
    // setters and getters
}

第二部分:-

 public *partial* class Item
{
    //setters and getters
}

这是部分class,其中声明了导航属性

这种情况不起作用,当返回到 ajax 调用时,它会提醒错误函数消息说 "internal server error 500" 我尝试将查询的数据解析为控制器中的 JSON 对象:-

var t = Json(res,"application/json; charset=utf-8",JsonRequestBehavior.AllowGet);

Queried Data at source code server side Watch:

Client Side error message details

但再次失败。 谢谢关心

像这样将 ProxyCreationEnabled 设置为 false

[HttpPost]
public ActionResult MainCatItems(int mainCatNo)
{
    entity.Configuration.ProxyCreationEnabled = false;
    var results = _model.Item.Where(x => x.MenuCategoryID == mainCatNo).ToList();
    return Json(new { data = results }, JsonRequestBehavior.AllowGet);
}

您正在使用 entity framework 生成的代理对象,这可能导致序列化出现问题

public JsonResult GetCatItems(int mainCatNo)
    {
        var results = ......//fetching data from Context
        return Json(new { data = results }, JsonRequestBehavior.AllowGet);
    }

试试这个..它可能对你有帮助你可以从动作控制器调用这个方法。

$.ajax({
                    type: "POST",
                    url: '@Url.Action("GetCatItems", "Cachier")',
                    contentType: "application/json; charset=utf-8",
                    data: datas,
                    dataType: "json",
                    success: successFunc,
                    error: function (xhr) {
                        alert('Error: ' + xhr.statusText);
                    },
                });