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

Ajax向Razor Pages传多JSON对象时后端Model为null的问题

问题分析与解决

你的后端Model始终为null,核心是模型类名称不匹配、属性名不匹配、数据类型不匹配这三个问题导致的,具体修正方案如下:

1. 模型类名称不匹配

后端Action接收的参数类型是All_Obj,但你定义的模型类名为model,名称完全不一致,无法完成映射。需要将模型类名称改为All_Obj:

// 修正后的模型类
public class All_Obj
{
    public Item_1 field_1 { get; set; }
    public Item_2 field_2 { get; set; }
}

public class Item_1
{
    public string field_item_1_1 { get; set; }
    public string field_item_1_2 { get; set; }
    public string field_item_1_3 { get; set; }
}

public class Item_2
{
    public string field_item_2_1 { get; set; }
    public string field_item_2_2 { get; set; }
    public string field_item_2_3 { get; set; }
}

2. 前后端属性名不匹配

前端构造的model属性是Item_1/Item_2,但后端模型类的属性是field_1/field_2,JSON序列化时无法对应,需统一两边的属性名:

  • 方案一:修改前端属性名,和后端一致
// 修正后的前端model构造
var model = {
    field_1: obj_A,  // 对应后端field_1
    field_2: obj_B   // 对应后端field_2
};
  • 方案二:给后端属性加特性,指定前端传递的属性名
using Newtonsoft.Json;

public class All_Obj
{
    [JsonProperty("Item_1")]
    public Item_1 field_1 { get; set; }
    [JsonProperty("Item_2")]
    public Item_2 field_2 { get; set; }
}

3. 数据类型不匹配

前端的Obj_A是数组类型(通过push把单个对象放进了数组),但后端模型类的field_1是单个Item_1对象,类型不兼容导致解析失败,需将前端的数组改为单个对象:

// 修正后的Obj_A构建逻辑
var obj_A = {};  // 直接定义为对象,而非数组
var inputs = $("#fieldset1 input[name^=show_all_]");
for(var i = 0; i < inputs.length; i++){
    var text_id = $(inputs[i]).attr("id").replace('show_all_','');
    var value = $(inputs[i]).val();
    obj_A[text_id]=value;
}
// Obj_B同理,直接构建为单个对象

// 最终构造model
var model = {
    Item_1: obj_A,
    Item_2: obj_B
};

额外检查项

  • 确保前端生成的text_id与后端Item_1/Item_2的属性名完全一致(大小写敏感);
  • 确认__RequestVerificationToken的选择器正确,Razor页面默认会生成该token,需保证能正常获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:05