Jquery与Asp.Net MVC通过Ajax向控制器传对象时参数始终为空
解决jQuery传递对象数组到ASP.NET MVC控制器参数为null的问题
我来帮你排查一下这个问题,这种参数为null的情况在MVC和jQuery交互时挺常见的,咱们一步步来分析:
首先看你贴的前端代码,第一个明显的问题就是DOM选择器错误:你写的$("countriesSelection")缺少了ID选择器的#前缀,应该写成$("#countriesSelection"),不然jQuery找不到对应的元素,selectedCountries数组会是空的,传去控制器自然就是null了。
接下来,就算你正确获取了数组,AJAX请求的配置如果不对,MVC的模型绑定器也没法正确解析数据,这是另一个高频坑。我把修正后的完整前端代码给你参考:
var selectedCountries = []; var id = 1; // 修正ID选择器,加上# $("#countriesSelection").find('span').each(function() { var countryName = $(this).text(); var profile1 = {}; profile1.id = id; profile1.countryName = countryName; selectedCountries.push(profile1); id++; // 建议这里id自增,不然所有对象的id都是1哦 }); // 发送AJAX请求的关键配置 $.ajax({ url: "/YourController/YourActionMethod", // 替换成你的控制器和Action路径 type: "POST", contentType: "application/json; charset=utf-8", // 必须设置这个,告诉服务器请求是JSON格式 data: JSON.stringify(selectedCountries), // 把JS数组转成JSON字符串再发送 success: function(response) { console.log("数据提交成功!", response); }, error: function(xhr, status, err) { console.error("提交失败:", err); } });
然后看控制器这边的配置,也需要对应调整:
- 首先要给Action标记
[HttpPost]特性,因为GET请求不适合传递复杂对象数组; - 要创建一个和前端对象结构匹配的模型类,让MVC能正确绑定数据:
// 先定义对应的模型类 public class CountryProfile { public int Id { get; set; } public string CountryName { get; set; } } // 控制器中的Action方法 [HttpPost] public ActionResult YourActionMethod(List<CountryProfile> selectedCountries) { // 现在selectedCountries应该就能接收到数据了 if (selectedCountries != null && selectedCountries.Any()) { // 这里写你的业务逻辑 } return Json(new { Success = true, Message = "数据已接收" }); }
最后再补充几个容易忽略的细节:
- 属性名匹配:前端的
id、countryName要和后端模型的Id、CountryName对应(MVC模型绑定大小写不敏感,但保持一致更稳妥); - jQuery版本:你用的2.1.1版本支持
JSON.stringify,如果是更老的jQuery版本,可能需要额外引入json2.js来支持JSON序列化; - 控制台排查:打开浏览器开发者工具的控制台,看看有没有DOM选择错误、AJAX请求的404/400报错,这些信息能快速帮你定位问题。
内容的提问来源于stack exchange,提问作者Kurkula
相关产品推荐
相关产品推荐

