无法将数据从 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);
},
});
我正在尝试将从上下文收集的查询数据发送回具有以下状态的 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);
},
});