在C# MVC框架中通过Ajax遍历控制器返回对象时遇到问题
解决C# MVC中AJAX遍历控制器返回对象的问题
嘿,我帮你排查下这个AJAX遍历的问题,看了你的代码,主要有两个关键地方需要调整:
1. 修正AJAX中$.each的回调参数
你当前的$.each写法参数顺序错了,jQuery的$.each回调函数第一个参数是索引值,第二个才是当前遍历的对象。你现在把参数写成function(items),相当于把索引当成了要遍历的项,自然拿不到displayName属性。
修正后的AJAX代码:
function getRName(obj) { $.ajax({ url: 'resourceNamePopup', method: 'post', data: { "search": obj.value }, dataType: 'json', success: function (data) { alert('success'); // 调整参数顺序:第一个是索引,第二个是当前项 $.each(data.items, function(index, item) { alert(item.displayName); }); }, // 建议加上错误处理,方便排查请求失败的情况 error: function(xhr, status, error) { console.error('AJAX请求出错:', error); } }); }
2. 确保控制器返回的JSON结构匹配AJAX的预期
你的AJAX代码里在遍历data.items,这意味着控制器需要返回一个包含items属性的JSON对象,而不是直接返回List数组。
修正后的C# Action代码:
public ActionResult resourceNamePopup(string search) { List<ResourceName> rnList = new List<ResourceName>(); // 这里填充你的rnList数据逻辑... // 将List包装成带有items属性的匿名对象 var responseData = new { items = rnList }; // 允许GET请求的话用JsonRequestBehavior.AllowGet,MVC5+也可以直接用Json() return Json(responseData, JsonRequestBehavior.AllowGet); }
额外说明
如果你的需求是直接返回数组,那AJAX里就不需要取data.items,直接遍历data即可:
// 对应控制器直接返回Json(rnList, ...)的情况 $.each(data, function(index, item) { alert(item.displayName); });
内容的提问来源于stack exchange,提问作者anand
相关产品推荐
相关产品推荐

