控制器未返回JSON结果至视图,JQuery更新复选框列表遇阻
我来帮你梳理下这个问题哈~
首先得明确不同ASP.NET框架版本对JSON返回的默认规则差异,这应该就是你遇到问题的核心原因:
1. 先搞清楚你用的是哪个版本的ASP.NET
如果是ASP.NET MVC 3或更早版本:
出于JSON劫持的安全考虑,框架默认禁止通过GET请求返回JSON数据,所以必须显式指定允许GET,也就是示例里的写法:return Json(data, JsonRequestBehavior.AllowGet);这时候要确保你已经引用了
System.Web.Mvc命名空间,不然JsonRequestBehavior枚举会找不到。如果是ASP.NET MVC 4+ 或者 ASP.NET Core:
框架已经默认放开了GET请求返回JSON的限制,JsonRequestBehavior.AllowGet这个参数已经被移除或者不再需要了——这时候你写return Json(data);就完全够用,反而硬加旧参数可能会报错(你说没报错,大概率是用了Core这类新版本)。
2. 给你几个调试排查的小建议
- 打开浏览器F12开发者工具,切换到「网络」标签,看看你的AJAX请求对应的响应内容:确认控制器是不是真的返回了正确格式的JSON,而不是其他内容。
- 检查你的jQuery AJAX请求是不是用的GET方式?如果是POST请求,不管哪个版本的写法都不会有问题,但如果是GET,旧版本必须显式允许。
- 确认控制器方法上有没有加
[HttpGet]特性,确保请求方式和控制器的配置匹配。
举个实际代码例子参考:
ASP.NET Core 版本的控制器写法
[HttpGet] public IActionResult GetCheckboxList() { // 模拟你的复选框数据 var checkboxData = new List<object> { new { Id = 1, Label = "选项1", IsChecked = false }, new { Id = 2, Label = "选项2", IsChecked = true } }; return Json(checkboxData); // 默认允许GET,直接返回即可 }
旧版ASP.NET MVC 写法
[HttpGet] public ActionResult GetCheckboxList() { var checkboxData = new List<object> { new { Id = 1, Label = "选项1", IsChecked = false }, new { Id = 2, Label = "选项2", IsChecked = true } }; return Json(checkboxData, JsonRequestBehavior.AllowGet); // 必须加AllowGet参数 }
总结
你的情况应该是用了较新的ASP.NET框架,所以不需要纠结JsonRequestBehavior.AllowGet,直接用return Json(data)就可以正常返回JSON给jQuery了。如果还是有疑问,先确认下项目的框架版本,再看看网络请求的响应内容是否正常就行~
内容的提问来源于stack exchange,提问作者Rilcon42
相关产品推荐
相关产品推荐

