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

.NET Core 6 Razor Pages中AJAX传参至Post方法参数为空问题求助

解决.NET Core 6 Razor Pages中AJAX Post传递多参数为null的问题

问题根源

  1. 多个[FromBody]标记错误:ASP.NET Core的请求体只能被解析一次,你在OnPostCalculate里给两个参数都加了[FromBody],这会导致参数无法正确绑定,最终出现null值。
  2. 仓库方法滥用[FromBody]:GetContribution是业务逻辑方法,不是HTTP请求入口方法,[FromBody]仅适用于接收请求体的Action/接口方法,加在这里完全无效,反而会干扰参数传递。

解决方案

1. 创建参数封装模型

定义一个类来封装前端传递的两个参数,让框架能正确解析请求体:

public class ContributionRequest
{
    public string Range1 { get; set; }
    public string Range2 { get; set; }
}

2. 修正Razor Page的Post方法

用上面的模型类替代多个[FromBody]参数,仅保留一个[FromBody]标记:

public IActionResult OnPostCalculate([FromBody] ContributionRequest request)
{
    // 先做参数校验,避免空值异常
    if (request == null || string.IsNullOrEmpty(request.Range1) || string.IsNullOrEmpty(request.Range2))
    {
        return new JsonResult("无效参数");
    }

    var monthly_credit = employeeRepository.GetContribution(request.Range1, request.Range2);

    foreach (var credit in monthly_credit)
    {
        Message = $"SSS Contribution = {credit}";
    }

    return new JsonResult(Message);
}

3. 移除仓库方法的多余标记

GetContribution作为内部业务方法,直接用普通参数即可:

public IEnumerable<SSS> GetContribution(string range1, string range2)
{
    // 增加空值校验,避免Parse报错
    if (string.IsNullOrEmpty(range1) || string.IsNullOrEmpty(range2))
    {
        throw new ArgumentNullException("区间参数不能为空");
    }

    double parsedRange1 = double.Parse(range1);
    double parsedRange2 = double.Parse(range2);

    // SQL code that returns values from tables
}

4. 前端代码确认(无需修改)

你的AJAX代码已经正确使用JSON.stringify和contentType: 'application/json;charset=utf-8',只需确保页面存在__RequestVerificationToken隐藏字段(Razor Pages默认会生成,只要页面有表单或调用过Html.AntiForgeryToken()即可)。

验证

修改后重新运行项目,触发AJAX请求,后端即可正确接收参数,不会再出现null异常。

内容的提问来源于stack exchange,提问作者N. Tanaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:15:09