.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 () { } }) }
相关截图:
问题原因
- GET请求直接传递数组时,jQuery默认的序列化格式无法被.NET Core的模型绑定正确识别;
- 未指定参数名称,控制器无法匹配到对应的参数;
- 控制器参数未配置正确的绑定特性(如
[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
相关产品推荐
相关产品推荐

