javascript - 如何在 Asp .Net Core 中设置序列化
问题描述
在我的第一个 ajax 调用中,我的 Ajax 回传 {"readyState":0,"status":0,"statusText":"error"} 出现以下错误,但第二个返回我想要的数据。我的 C# 方法 (UserSelect) JsonResults 在我放置断点时显示数据
我的 C# 代码:
public IActionResult OnPostAreaSelect(string Id)
{
//Generating list for Areas
Guid ModelId = new Guid(Id);
List<ModelArea> modelAreas = _context.ModelArea.Distinct()
.Where(w => w.ModelId == ModelId).OrderBy(o => o.AreaColumn.Name).Include(i => i.AreaColumn).ToList();
return new JsonResult(modelAreas);
}
public IActionResult OnPostUserSelect(string Id)
{
//Generating list for Users
Guid ModelId = new Guid(Id);
List<UserModel> userModels = _context.UserModel
.Where(w => w.ModelId == ModelId).OrderBy(o => o.User.FullName)
.Include(i => i.User)
.ToList();
return new JsonResult(userModels);
}
我的 JavaScript :
<script type="text/javascript">
$(document).ready(function () {
$("#RepfocusModelDropdown").change(function () {
var Id = $(this).val();
if (Id != null) {
$.ajax({
async: true,
type: "POST",
url: "./Create?handler=UserSelect",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: {
Id: Id
},
crossDomain: true,
dataType: "json",
success: function (response) {
alert(JSON.stringify(response));
},
error: function (response) {
alert(JSON.stringify(response));
}
});
$.ajax({
type: "POST",
url: "./Create?handler=AreaSelect",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: {
Id: Id
},
dataType: "json",
success: function (response) {
alert(JSON.stringify(response));
},
error: function (response) {
alert(JSON.stringify(response));
}
});
}
})
})
我的脚本上的第二个 ajax 调用工作正常,只有第一个返回错误我该如何解决这个错误
解决方案
当您使用EntityFramework(或其他 ORM)时,序列化可能会出现问题,因为实体可能有一些循环引用。为避免此问题,解决方案是设置序列化设置:
services.AddMvc().AddJsonOptions(opt => {
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
或者:
Newtonsoft.Json.JsonConvert.DefaultSettings = () => new Newtonsoft.Json.JsonSerializerSettings {
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};
推荐阅读
- python - 地牢爬行 - 地图
- java - Spark Rdd 输出到 Kafka 主题
- rust - 如何从 Actix-web 中 HTML 表单的 POST 请求中获取参数?
- android - 在 iOS 和 Android 上 memcpy() / mktime() 线程安全吗?
- python-3.x - python 中的 Selenium webdriver find_element_by_id() 方法使用 phantomjs 引发错误
- python - 将行转换为python中的列
- java - Selenium (Java):如何定位浏览器验证消息?
- excel - 优化宏:表格清空内容
- python - 使用 R/Python 将 SAS 文件 (sas7bdat) 转换为平面文件,没有内存限制
- arrays - 如果 AC-AF 列包含空白,则剪切并粘贴行