ASP.NET Core中AJAX传值控制器仅接收一个属性另一个为null
问题解决方案
可能的原因及修复步骤
1. 修正AJAX数据的属性名与模型匹配
你AJAX里viewmodel的pin是小写,而模型类StockTransferToRetailerVMList的对应属性是Pin(首字母大写)。虽然ASP.NET Core模型绑定默认支持大小写不敏感,但严格匹配属性名能避免潜在的绑定异常。同时注意补充AJAX代码中缺失的对象闭合大括号,修正拼写错误:
var viewmodel = { "Pin": $(".password").val(), // 改为与模型一致的首字母大写Pin "STRetailerVMList": STRetailerVMList }; // 补充缺失的闭合大括号 var url = '@Url.Action("StockTransferToRetailer", "Create")'; $.ajax({ url: url, type: "POST", data: JSON.stringify(viewmodel), contentType: "application/json; charset=utf-8", dataType: "json", beforeSend: function () { return confirm("Please confirm to transfer?"); // 修正拼写错误confrim→confirm }, });
2. 为控制器参数添加[FromBody]特性
由于你发送的是JSON格式的请求体,需要明确告诉ASP.NET Core从请求体中绑定模型。修改控制器方法:
[HttpPost] public JsonResult Create([FromBody] StockTransferToRetailerVMList viewmodel) { return Json(new { }); }
3. 检查子模型的可绑定性
确保StockTransferRetailerViewModel的所有需要绑定的属性都是public访问修饰符,且属性名与AJAX中传递的子对象属性名完全匹配(包括大小写)。例如子模型定义需符合如下格式:
public class StockTransferRetailerViewModel { public int Id { get; set; } public string ProductName { get; set; } // 其他需要绑定的属性 }
对应的AJAX中STRetailerVMList数组里的每个对象属性名要与子模型一致,比如{"Id": 1, "ProductName": "Sample"}。
4. 验证请求的JSON格式
可以在AJAX代码中添加日志打印,确认生成的JSON结构是否正确:
console.log(JSON.stringify(viewmodel));
通过浏览器控制台查看输出,确认STRetailerVMList是有效的数组格式,没有语法错误。
内容的提问来源于stack exchange,提问作者Mithun Chandra Howlader
相关产品推荐
相关产品推荐

