使用jQuery Ajax向MVC控制器传递对象列表与ID时参数为空
问题:Ajax传递数据到MVC控制器时参数为空
尝试将auctionId与picList对象列表传递至MVC控制器,但控制器接收的两个参数均为空。参考Stack Overflow各类方案修改代码后问题仍未解决,甚至简化测试(传递{"Name": "Adam"}并在控制器新增对应参数)也无法成功传值。
JSON.stringify(data)输出结果:auctionId为数字类型,picList是包含多个对象的数组,每个对象包含ImageId、FileName、FileLocation、SortOrder字段。
相关代码
视图模型
public class FileViewModel { public FileViewModel() { UnitPicturesList = new List<UnitPictures>(); } public IList<IFormFile> Files { get; set; } [Required] public int AuctionId { get; set; } public string FileLocation { get; set; } public List<UnitPictures> UnitPicturesList { get; set; } }
模型
public class UnitPictures { public long ImageId { get; set; } public string FileName { get; set; } public string FileLocation { get; set; } public int SortOrder { get; set; } }
控制器方法
[HttpPost] public ActionResult UnitImages(long auctionId, List<UnitPictures> picList) { ... }
Ajax调用代码
function UpdateImages(auctionId, picList) { var data = { auctionId: auctionId, picList: picList }; console.log(JSON.stringify(data)); $.ajax({ cache: false, contentType: "application/json; charset=utf-8", dataType: "json", type: "POST", url: '/PhotoUploader/UnitImages', data: JSON.stringify(data), success: function(data){ if(data.Result == 1) { alert("images where successfully updated."); }else { alert('images where successfully updated.'); } }, error: function() { alert("The images were not updated because of a problem.") } }); }
解决方法
改用视图模型接收参数
MVC对多复杂参数的绑定支持有限,建议统一使用视图模型接收。修改控制器方法:[HttpPost] public ActionResult UnitImages([FromBody] FileViewModel model) { // 直接通过model.AuctionId获取ID,model.UnitPicturesList获取图片列表 }同步修改Ajax的data结构,匹配视图模型的属性名:
var data = { AuctionId: auctionId, UnitPicturesList: picList };添加[FromBody]特性
传递JSON格式数据时,必须为控制器参数添加[FromBody]特性,明确告诉框架从请求体中解析数据,而非URL或表单参数。严格匹配参数大小写
C#是大小写敏感语言,Ajax传递的JSON字段名必须与控制器参数/视图模型属性名完全一致。例如视图模型中的AuctionId(首字母大写),Ajax中不能写成auctionId。验证路由正确性
确认/PhotoUploader/UnitImages路由可正确映射到目标控制器方法,检查控制器类是否添加了[Route("PhotoUploader")]特性,或默认路由配置是否正常。检查JSON格式
浏览器控制台输出的JSON需确保格式合法,比如数组闭合、字段名无拼写错误,避免因格式问题导致绑定失败。
内容的提问来源于stack exchange,提问作者whisk
相关产品推荐
相关产品推荐

