ASP.NET MVC 5 DropDownList绑定SemesterDetails的ModuleCode属性问题问询
问题根因
你当前代码有两个核心问题:
- 控制器中将
SemesterDetails集合转换成了纯字符串列表List<string>,字符串类型不存在ModuleCode属性,调用SelectList构造函数时指定的绑定字段无法匹配,自然取不到对应值。 - 视图代码里的默认提示文本存在拼写错误:
SelctModuleCode少了字母e。
第一步:修改控制器Action代码
直接使用读取到的SemesterDetails集合构造SelectList,不需要额外转成字符串列表:
public ActionResult EditStudyHrs(User user) { List<SemesterDetails> list = dataHandle.Read(user).ToList(); // 参数依次为:数据源、下拉项值绑定的属性名、下拉项显示文本绑定的属性名 // 如果需要显示模块名,可将第三个参数改为"ModuleName" ViewBag.Modules = new SelectList(list, "ModuleCode", "ModuleCode"); return View(); }
第二步:修改视图代码
修正拼写错误,保持下拉框name属性和ViewBag的key一致即可完成绑定:
<div class="form-horizontal"> <h4>Details</h4> <hr /> @Html.DropDownList("Modules", "请选择模块编码") </div>
补充:强类型绑定方案(推荐)
如果需要提交表单后自动获取选中的模块编码,推荐使用强类型绑定:
- 新增视图模型,添加选中值属性:
public class StudyHrsViewModel { public string SelectedModuleCode { get; set; } // 其他业务需要的属性 }
- Action中给视图传递模型:
public ActionResult EditStudyHrs(User user) { List<SemesterDetails> list = dataHandle.Read(user).ToList(); ViewBag.ModuleOptions = new SelectList(list, "ModuleCode", "ModuleCode"); return View(new StudyHrsViewModel()); }
- 视图中使用
DropDownListFor绑定:
@model StudyHrsViewModel <div class="form-horizontal"> <h4>Details</h4> <hr /> @Html.DropDownListFor(m => m.SelectedModuleCode, (SelectList)ViewBag.ModuleOptions, "请选择模块编码") </div>
提交表单时,SelectedModuleCode属性会自动赋值为用户选中的模块编码。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

