1.1 Visual Studio Community 2019;
1.2 SQL Server 2019;
1.3 Windows 10 专业版;
2.1 基本MVC项目;
2.2 View中发起post请求之后,Controller中可以正常获取到数据库的数据,但是Controller调用jquery中相关方法返回的Json数据无法再次回传到View中;
2.3 问题出现后,以前备份的代码全都显示同样的错误;
2.4 替换jquery、重启电脑后,错误没有改变。
View:
var id = rows[0].ID;
$.post("/UserInfo/ShowEditInfo", { "id": id }, function (data) {
$("#txtUName").val(data.UName);
$("#txtUPwd").val(data.UPwd);
$("#txtRemark").val(data.Remark);
$("#txtSort").val(data.Sort);
$("#txtSubTime").val(ChangeDateFormat(data.SubTime));
$("#txtDelFlag").val(data.DelFlag);
$("#txtId").val(data.ID);
});
Controller:
public ActionResult ShowEditInfo()
{
int id = int.Parse(Request["id"]);
var userInfo = UserInfoService.LoadEntities(u => u.ID == id).FirstOrDefault();
return Json(userInfo, JsonRequestBehavior.AllowGet);
}
图1 Web端报错信息
看起來data裡的屬性全都是undefined
建議你確認API回傳內容及屬性名稱
也可以在瀏覽器開發者工具的網路頁籤中,看看回傳的數據格式
感谢您的回复!
此处确实有一个错误,INET_E_REDIRECT_FAILED,如下:
这意味什么,难道是我的计算机缺少某些文件,或者需要修改某个配置信息?
顺便说一下:我之前的代码本来可以正常显示的,现在拿来测试显示的结果和这个一样(以前的代代码未做任何修改)。
@Jeremy.Wu:
意思是ShowEditInfo 這個API出錯了
要轉調到自訂錯誤頁Error.html
請檢查ShowEditInfo
int.Parse(Request["id"]); < 這裡是否轉型錯誤
或是
UserInfoService.LoadEntities(u => u.ID == id).FirstOrDefault(); < 這段查詢是否發生例外
@RosonJ:
感谢您的回复!
经过再次验证,C里面的userInfo对象数据获取正常,应该是在return Json这里出现了问题。
请问是否有什么建议?谢谢
@Jeremy.Wu:
return Json的方式沒有錯
但你用的是post,第二個參數可以不用,雖然不太確定有沒有影響
@RosonJ:
感谢您的回复!
通过查看日志,找出了错误原因。
序列化成Json格式时出错了,导航属性导致了死循环。
序列化类型为“System.Data.Entity.DynamicProxies.R_UserInfo_ActionInf_F2599E3F088BEBAADCFD8B2B6E5E9F2D7CCACC475AA1FDDC879B974DC462BF12”的对象时检测到循环引用
@Jeremy.Wu:
沒見過的情況
可以看看你的userInfo class嗎?好奇
@RosonJ:
UserInfo和RoleInfo表之间存在多对多的关系。
@Jeremy.Wu:
原來是這樣,學習了
1、 检查下SubTime 是不是 为null
2、 检查返回json 有没有SubTime 属性, 大小写, 是不是一样。
感谢您的回复!
根据您的提示,经过修改View中的代码,测试后显示如下,个人感觉还是jquery的问题,有点奇怪。
请帮忙再分析分析,感谢!
@Jeremy.Wu: undefined 是没有 Replace 方法的
要看报错的堆栈信息呀,点进去Index:307应该跳转到这一句
– 。淑女范erり 4年前·$("#txtSubTime").val(ChangeDateFormat(data.SubTime));
,从错误信息可以看出,应该是data.SubTime
为null造成的。@。淑女范erり: 感谢您的回复。
– Jeremy.Wu 4年前经确认,data.SubTime确实是为null。
我屏蔽了这一句
$("#txtSubTime").val(ChangeDateFormat(data.SubTime));
但是现在数据依然没有显示出来数据,web端也没有错误出现。
进一步确认后,发现data没有数据。
@Jeremy.Wu: data没有数据那可能是server端的问题了,你debug跟踪一下看看。
– 。淑女范erり 4年前