You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:35:26