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

.NET Core+Ajax使用Select2时控制器接收值为空问题

解决Select2选中值通过Ajax提交到.NET Core控制器为空的问题

我需要将Select2组件选中的值通过Ajax提交到后端,但.NET Core控制器接收到的值始终为空,前端代码如下:

function UpdateCities() {

    var cities = $("#selected-cities").val();

    $.ajax({
        url: "/Admin/MyBusinesses/UpdateCities",
        data: cities,
        type: "Get",
        success: function () {
            
        }
    })

}

相关截图:
Select2选中值状态截图

问题原因

  1. GET请求直接传递数组时,jQuery默认的序列化格式无法被.NET Core的模型绑定正确识别;
  2. 未指定参数名称,控制器无法匹配到对应的参数;
  3. 控制器参数未配置正确的绑定特性(如[FromQuery])。

解决办法

办法一:调整GET请求的参数传递方式

修改Ajax配置,指定参数名称并启用传统数组序列化:

function UpdateCities() {
    var cities = $("#selected-cities").val();

    $.ajax({
        url: "/Admin/MyBusinesses/UpdateCities",
        data: { cities: cities }, // 明确参数名,与控制器参数对应
        type: "Get",
        traditional: true, // 启用传统序列化,适配.NET Core数组绑定
        success: function () {
            
        }
    })
}

同时确保控制器参数名称一致,并添加[FromQuery]特性:

public IActionResult UpdateCities([FromQuery] List<int> cities)
{
    // 处理业务逻辑
    return Ok();
}

办法二:改用POST请求传递JSON数据(推荐)

GET请求存在长度限制,多选值较多时建议用POST:

function UpdateCities() {
    var cities = $("#selected-cities").val();

    $.ajax({
        url: "/Admin/MyBusinesses/UpdateCities",
        data: JSON.stringify({ cities: cities }),
        type: "Post",
        contentType: "application/json", // 指定内容类型为JSON
        success: function () {
            
        }
    })
}

对应的控制器需要添加[HttpPost]特性,并通过模型接收:

[HttpPost]
public IActionResult UpdateCities([FromBody] CityRequest model)
{
    // 使用model.Cities获取选中的值
    return Ok();
}

// 定义接收模型
public class CityRequest
{
    public List<int> Cities { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:02