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

Html.DropDownList在GET请求中无法设置选中项问题

问题解决:GET请求下拉列表选中项不生效,POST正常

核心原因

  1. 类型不匹配:构造SelectList时指定的选中值student.Title,与Titles.Id的类型不一致(比如Id是int,Title是string),导致GET请求时无法匹配对应选项;而POST请求时表单提交的是字符串化的Id,刚好和student.Title类型匹配,所以能正确选中。
  2. 控件取值优先级:Html.DropDownList会优先从ModelState、ViewData读取值,GET请求时ModelState为空,但如果ViewModel的Title属性和SelectList的Value类型不匹配,即使SelectList指定了选中值也会失效。

解决方案

  • 统一类型:检查Student类的Title属性类型,和Titles表的Id类型保持一致。例如Titles.Id是int,则修改Student类:

    public int? Title { get; set; } // 允许为空,适配未选择的情况
    
  • 使用强类型控件(推荐):将视图中的Html.DropDownList替换为Html.DropDownListFor,强类型绑定能避免取值优先级和名称匹配问题:

    @Html.DropDownListFor(m => m.Title, Model.Titles, new { @class = "form-control shadow-none" })
    @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
    
  • 类型转换适配(备选):如果无法修改类型,构造SelectList时手动转换选中值的类型:

    int selectedId = 0;
    int.TryParse(student.Title, out selectedId);
    student.Titles = new SelectList(_dB.Titles, "Id", "Description", selectedId);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:50:20