使用Ajax向C#后端传值时变量始终为空或0的问题
解决AJAX传参后端接收为null/0的问题
问题根因
ASP.NET Core的[FromBody]特性仅支持绑定单个复杂类型对象,不能同时绑定多个简单类型参数(比如long和string)。你当前把[FromBody]加在id上,导致模型绑定逻辑混乱,两个参数都无法正确获取前端传递的值。
具体修复方案
第一步:定义参数封装类
在后端新增一个用于接收请求参数的DTO类:
public class DeleteContaRequest { public long Id { get; set; } public string DataAtual { get; set; } }
第二步:修改后端接口方法
将原方法的两个参数替换为这个DTO类,并给它加上[FromBody]:
public PartialViewResult OnPostDelete([FromBody] DeleteContaRequest request) { contaDTO.Remove(request.Id, contaDTO.Database, contaDTO.ContaCollection); dataCorrente = DateTime.ParseExact(request.DataAtual, "yyyy-MM", null).AddMonths(1); contas = BuscarContasUsuarioMes(User.Identity.Name, dataCorrente); return Partial("_PartialContas", contas); }
第三步:前端代码保持不变
你的AJAX代码已经正确完成了JSON序列化和请求头设置,不需要做任何修改,参数会自动映射到DTO类的对应属性上。
可选替代方案(不推荐)
如果不想新建DTO类,也可以改用表单格式传参:
- 把AJAX的
contentType改为"application/x-www-form-urlencoded; charset=utf-8" - 去掉
JSON.stringify(params),直接传params - 后端方法去掉
[FromBody]特性
但这种方式在参数增多时会显得杂乱,推荐使用DTO类的规范写法。
内容的提问来源于stack exchange,提问作者Guilherme Augusto De Sousa
相关产品推荐
相关产品推荐

