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

ASP.NET 6中向控制器传递对象数组时参数为空的问题排查

解决ASP.NET Core 6中Ajax传对象数组到控制器参数为null的问题

问题根源

你的代码存在两个关键问题导致参数接收失败:

  • Ajax请求里,你把JSON字符串包装成了{"data": JSON.stringify(model)}的键值对结构,但同时设置了contentType: 'application/json',ASP.NET Core无法正确解析这种格式的请求体。
  • 控制器方法的参数未添加[FromBody]特性,ASP.NET Core默认从表单数据绑定参数,而非请求体中的JSON内容。

修正后的代码

1. jQuery Ajax代码调整

<script type="text/javascript">
function check() {
    debugger
    var model = @Html.Raw(Json.Serialize(@ViewBag.alldata));
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        url: "/Home/exporttocsv",
        data: JSON.stringify(model), // 直接传递序列化后的JSON数组,无需包装成对象
        type: 'POST',
        success: function (data) {
            location.href = '@Url.Action("DownloadCSV", "Home")?success=' + data;
        }
    });
};
</script>

2. C#控制器代码调整

public class HomeController: Controller
{
    [HttpPost]
    public string exporttocsv([FromBody] List<ShowNihSearchData> data) // 添加[FromBody]特性指定从请求体解析参数
    {  
     // 处理data的业务逻辑...
    }
}

额外注意事项

  • 确保ShowNihSearchData模型的属性名与JSON中的键完全匹配(大小写敏感)。如果C#模型用帕斯卡命名(如GrantNumber)、JSON用驼峰命名(grantNumber),可在模型属性上添加[JsonPropertyName("grantNumber")]特性,或者在Program.cs中全局配置JSON序列化规则:
    builder.Services.AddControllersWithViews()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });
    
  • 确认ViewBag.alldata确实是List<ShowNihSearchData>类型,序列化后能生成合法的JSON数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:32:06