如何让二级下拉框正确加载?控制器方法未触发问题排查
二级下拉框未触发控制器方法的问题排查与修复
核心问题1:函数未实际执行
你的JavaScript代码里只是引用了函数对象,没有调用执行,导致AJAX请求根本没发送,控制器断点自然不会触发。
错误代码:
$(document).ready(function () { getTemplateByDepartmentID; // 缺少(),未执行函数 }) $("#deptdropdown").change(function () { getTemplateByDepartmentID; // 同样缺少() })
修复后:
$(document).ready(function () { getTemplateByDepartmentID(); }) $("#deptdropdown").change(function () { getTemplateByDepartmentID(); })
核心问题2:JsonResult默认禁止GET请求
ASP.NET MVC中,Json()方法默认拒绝GET请求,必须显式允许,否则会返回错误,请求无法到达控制器。
错误控制器代码:
return Json(_uow.Repository<Template>().Get(x => x.TemplateID == id));
修复后(同时修正查询逻辑错误):
// 1. 添加JsonRequestBehavior.AllowGet允许GET请求 // 2. 修正查询条件:应该用DeptID关联部门,不是TemplateID return Json(_uow.Repository<Template>().Get(x => x.DeptID == id), JsonRequestBehavior.AllowGet);
其他关键优化点
- 清空旧选项避免重复
每次切换部门时,先清空模板下拉框的旧内容,再添加新选项:
success: function (data) { $('#templatedropdown').empty(); $('#templatedropdown').append('<option>--Select--</option>'); $(data).each(function (index, item) { // 注意:模板选项要对应Template实体的属性,不是部门的DeptID/Dept_Name $('#templatedropdown').append('<option value="' + item.TemplateID + '">' + item.TemplateName + '</option>'); }); }
移除不必要的配置
GET请求不需要设置contentType: "application/json; charset=utf-8",直接删掉即可,因为GET参数是通过URL传递的,不是请求体。处理空选择情况
当用户选择默认的"--Select--"时,不发送AJAX请求,直接重置模板下拉框:
var getTemplateByDepartmentID = function() { var deptId = $('#deptdropdown').val(); if (!deptId) { $('#templatedropdown').empty(); $('#templatedropdown').append('<option>--Select--</option>'); return; } $.ajax({ url: "@Url.Action("GetTemplateByDeptId", "Home")", type: "Get", data: { id: deptId }, success: function (data) { // 清空+添加选项逻辑 } }); }
内容的提问来源于stack exchange,提问作者Donnie
相关产品推荐
相关产品推荐

