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

Asp.net Core Razor Pages用Ajax Post提交数据后台接收值为null如何解决

问题原因

你通过AJAX传递的是JSON格式的请求数据,ASP.NET Core Razor Pages默认的模型绑定逻辑是从表单字段获取值,不会自动读取JSON格式的请求体,所以参数绑定失败为null。

解决方案

方案1:给后台参数添加[FromBody]特性

修改你的页面处理方法,在参数前加[FromBody]声明,让框架从JSON请求体中绑定数据:

public async Task<IActionResult> OnPostSave1Async([FromBody] CreateOrderViewModel order)
{
    //some code
}

该方案不需要改动前端的AJAX代码,适合传递复杂JSON结构的场景。

方案2:调整前端AJAX参数,使用表单格式提交

不需要修改后端代码,把AJAX里的JSON序列化和自定义contentType配置去掉,直接传递JS对象,框架会自动转成表单格式提交:

function save1() {
    var order = { SerialNo: '1'};
    $.ajax({
        type: "POST",
        url: "@Url.Page(\"Index\",\"Save1\")",
        headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
        data: order, // 无需JSON序列化
        // 删除自定义的contentType配置,使用默认的application/x-www-form-urlencoded
        dataType: "json",
        success: function () {
            alert('Success!');
        },
        failure: function (response) {
            alert('error!');
        }
    });
}

该方案适合参数结构简单的场景。

注意事项
  • 确保CreateOrderViewModel类的属性都有公开的set访问器,你当前的代码已经满足该条件
  • 你当前在headers里传递防伪令牌的逻辑是正确的,只需确认页面已生成__RequestVerificationToken隐藏字段即可(默认Razor Pages页面包含form标签时会自动生成,无form标签的情况可以手动添加@Html.AntiForgeryToken()生成)

内容的提问来源于stack exchange,提问作者Arash Masir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:04