AJAX调用未向Controller传值,Action接收参数为null求助
解决AJAX传值到Controller参数为null的问题
问题原因
你设置了contentType: "application/json"并将数据序列化为JSON字符串,但ASP.NET Core默认不会从JSON请求体中自动绑定多个独立的Action参数,只会绑定到一个模型对象或者通过[FromBody]标记的参数。
解决方案
方案1:创建ViewModel类接收参数(推荐规范写法)
适合参数较多或需要复用的场景:
- 定义ViewModel类:
public class ResultViewModel { public int Id { get; set; } public string Value { get; set; } }
- 修改Controller的Action,用ViewModel接收并添加
[FromBody]特性:
public IActionResult AddResult([FromBody] ResultViewModel model) { if(ModelState.IsValid) { test.Update(model.Id, model.Value); } return Json(new { result = true }); }
AJAX代码保持原写法即可。
方案2:给参数添加[FromBody](适合简单场景)
不想创建ViewModel的话,可以用动态对象接收:
public IActionResult AddResult([FromBody] dynamic model) { int id = model.id; string value = model.value; if(ModelState.IsValid) { test.Update(id, value); } return Json(new { result = true }); }
AJAX代码保持不变。
方案3:调整AJAX请求格式(不用JSON序列化)
去掉contentType: "application/json",直接传递普通对象,让jQuery自动编码为表单格式:
$(document).on('click','.btnsubmit', function (e) { e.preventDefault(); var id = parseInt($(this).attr("id")); var value=$("#txt_"+id).val(); $.ajax({ url: "/Home/AddResult", type :"POST", async:false, data: {id: id, value: value}, // 直接传对象,无需JSON.stringify success: function (data) { alert("Result Saved"); console.log(data.result); }, error: function (err) { console.error(err); } }) });
Controller的Action保持原代码即可,ASP.NET Core会自动从表单请求体绑定独立参数。
额外提示
- 尽量避免使用
async:false,同步AJAX会阻塞浏览器主线程,影响用户体验,建议改用异步回调或async/await写法。 - 可以通过浏览器控制台的Network面板,查看请求的Payload是否正确发送,确认参数名、数据格式与Action参数是否匹配(ASP.NET Core默认支持驼峰/帕斯卡命名的自动映射)。
内容的提问来源于stack exchange,提问作者Qasim Asghar
相关产品推荐
相关产品推荐

