Html.DropDownList在GET请求中无法设置选中项问题
问题解决:GET请求下拉列表选中项不生效,POST正常
核心原因
- 类型不匹配:构造
SelectList时指定的选中值student.Title,与Titles.Id的类型不一致(比如Id是int,Title是string),导致GET请求时无法匹配对应选项;而POST请求时表单提交的是字符串化的Id,刚好和student.Title类型匹配,所以能正确选中。 - 控件取值优先级:
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
相关产品推荐
相关产品推荐

