如何在MVC C#中获取多下拉列表选中值,解决单传为空问题?
解决两个下拉框 onChange 时同时传递值到控制器的问题
我来帮你搞定这个问题——你当前遇到的核心问题是:每次触发单个下拉框的变更事件时,只传递了当前下拉框的值,没有带上另一个下拉框的选中值,导致控制器里永远只有一个参数有值,另一个为空。另外你控制器里的逻辑也有点小问题,会覆盖掉传过来的参数值,咱们一起调整一下。
问题根源分析
- 你的jQuery脚本中,
#Cntry变更时只传了cntry参数,#Yr变更时只传了yr参数,控制器无法获取另一个下拉框的当前值 - 控制器代码里的
else { yr = "N1"; }逻辑会强制覆盖掉传过来的yr值,这不是你想要的效果
修改方案
1. 调整控制器逻辑
去掉会覆盖参数的错误逻辑,改为给空参数设置默认值,这样两个参数都能正确接收:
public ActionResult All(string cntry, string yr) { Details details = new Details(); var model = new ClsS(); // 给空参数设置默认值,而不是覆盖已有值 if(string.IsNullOrEmpty(cntry)) { cntry = "C1"; } if(string.IsNullOrEmpty(yr)) { yr = "N1"; } var aa = details.Ra(cntry, yr); return View(aa, model); }
2. 修改jQuery脚本,每次传递两个下拉框的值
不管哪个下拉框触发变更,都同时获取两个下拉框的当前选中值,一起传给控制器:
// 给两个下拉框绑定change事件,统一处理 $('#Cntry, #Yr').change(function () { var url = '@Url.Action("All")'; // 同时获取两个下拉框的值 var cntryVal = $('#Cntry').val(); var yrVal = $('#Yr').val(); // 把两个参数一起传递 $('#container').load(url, { cntry: cntryVal, yr: yrVal }); });
3. 保持View不变(确认下拉框ID正确)
你的View代码生成的下拉框ID应该是Cntry和Yr,和脚本里的选择器匹配,不需要修改:
@Html.DropDownListFor(m => m.Cntry, new List<SelectListItem> { new SelectListItem {Value = "C1", Text = "Chile"}, new SelectListItem {Value = "F1", Text = "France" }, new SelectListItem {Value = "G1", Text = "Germany" }, }, new {@class = "form-control"}) @Html.DropDownListFor(m => m.Yr, new List<SelectListItem> { new SelectListItem {Value = "N1", Text="New" }, new SelectListItem {Value = "P1", Text = "Previous"}, new SelectListItem {Value = "L1", Text = "Last" }, }, new { @class = "form-control"}) <div id="container"></div>
这样修改后,不管你先选哪个下拉框,再选另一个,控制器都能同时拿到cntry和yr两个参数的正确值,#container也会加载到对应的结果啦。
内容的提问来源于stack exchange,提问作者User9895
相关产品推荐
相关产品推荐

