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
相关产品推荐
相关产品推荐

