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

ASP.NET MVC 5 DropDownList绑定SemesterDetails的ModuleCode属性问题问询

问题根因

你当前代码有两个核心问题:

  1. 控制器中将SemesterDetails集合转换成了纯字符串列表List<string>,字符串类型不存在ModuleCode属性,调用SelectList构造函数时指定的绑定字段无法匹配,自然取不到对应值。
  2. 视图代码里的默认提示文本存在拼写错误: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>

补充:强类型绑定方案(推荐)

如果需要提交表单后自动获取选中的模块编码,推荐使用强类型绑定:

  1. 新增视图模型,添加选中值属性:
public class StudyHrsViewModel
{
    public string SelectedModuleCode { get; set; }
    // 其他业务需要的属性
}
  1. Action中给视图传递模型:
public ActionResult EditStudyHrs(User user)
{
    List<SemesterDetails> list = dataHandle.Read(user).ToList();
    ViewBag.ModuleOptions = new SelectList(list, "ModuleCode", "ModuleCode");
    return View(new StudyHrsViewModel());
}
  1. 视图中使用DropDownListFor绑定:
@model StudyHrsViewModel
<div class="form-horizontal">
    <h4>Details</h4>
    <hr />
    @Html.DropDownListFor(m => m.SelectedModuleCode, (SelectList)ViewBag.ModuleOptions, "请选择模块编码")
</div>

提交表单时,SelectedModuleCode属性会自动赋值为用户选中的模块编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:05