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

MVC多选DropDownList选中值通过AJAX提交到Controller为空如何解决

问题解决方法

你的问题核心是前后端参数名不匹配,以及多选下拉返回值为数组类型导致的后端参数适配问题,按以下步骤修改即可正常传值:

1. 统一前后端参数名

你在AJAX请求中提交的参数名为valueMember,但Controller方法里定义的接收参数名为itemsSelected,参数名不一致会导致MVC模型绑定无法匹配到值,两种修改方案二选一:

  • 方案一:修改AJAX参数名和后端保持一致
    把JS代码里的data: { valueMember: value }修改为data: { itemsSelected: value }
  • 方案二:修改Controller参数名和前端保持一致
    把方法签名修改为public IActionResult SearchEmployee(string[] valueMember)

2. 适配多选值的数组类型

多选下拉的.val()返回的是字符串数组,后端接收参数建议定义为数组类型,同时补充[HttpPost]注解和AJAX请求方式匹配:

[HttpPost]
// 支持接收多个选中值,如需转逗号分隔字符串可自行拼接
public IActionResult SearchEmployee(string[] itemsSelected)
{
    // 示例:数组转逗号分隔字符串的逻辑
    // string selectedStr = string.Join(",", itemsSelected ?? Array.Empty<string>());
    
    // 注意:你当前方法返回的是RedirectToAction,AJAX请求不会触发页面跳转
    // 如果是异步刷新直接返回Json对象即可,需要整页刷新建议直接提交表单不用AJAX
    return Json(new { success = true, data = itemsSelected });
}

3. 可选优化(仅需后端接收字符串时使用)

如果业务需要后端接收字符串类型的参数,可以在前端把选中的数组拼接成逗号分隔的字符串再提交:

function UpdateEmployeeStatusFilter() {
  var value = $('#employee-status-type').val();
  // 数组转逗号分隔字符串
  var submitValue = value ? value.join(',') : '';
  $.ajax({
    type: 'POST',
    url: '@Url.Action("SearchEmployee", "Employee")',
    data: { itemsSelected: submitValue },
    dataType: 'json',
    traditional: true,
    success: function (msg) { alert(msg) }
  });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:15:01