如何在cshtml视图中正确设置SelectList下拉框的默认选中项
问题根本原因
- 优先级问题:ASP.NET Core的
selectTag Helper会优先使用asp-for绑定的属性值作为选中项,你在SelectList构造函数中指定的默认选中值优先级更低,会被覆盖。 - 类型/值不匹配:你当前构造的
SelectList选项值是AccomodationType的Type字段(字符串类型),但asp-for绑定的是Accomodation.AccomodationTypeId(外键,大概率是数值类型的Id),二者类型和取值完全不匹配,自然无法正确选中。
解决方法
按你的业务需求选以下任意一种即可:
方案1:常规用法(下拉选项值为TypeId,显示文本为Type)
这是最符合外键绑定场景的方案,构造SelectList时明确指定值字段、显示字段和默认选中的Id:
public SelectList AccomodationTypesTypes() { // 先取Type为"B"对应的Id作为默认选中值 var defaultSelectedId = AccomodationTypes.First(a => a.Type == "B").Id; // 参数依次为:数据源、值字段名、显示文本字段名、默认选中值 return new SelectList(AccomodationTypes, "Id", "Type", defaultSelectedId); }
如果是新建场景,建议直接给绑定属性赋值,优先级最高,不会失效:
// ViewModel初始化/返回视图前执行 Accomodation.AccomodationTypeId = AccomodationTypes.First(a => a.Type == "B").Id;
方案2:下拉选项值直接用Type字符串
如果你确实需要选中值为Type字段的字符串,修改asp-for绑定到对应存储Type的字符串属性即可:
// 构造SelectList public SelectList AccomodationTypesTypes() { return new SelectList(AccomodationTypes.Select(a => a.Type), "B"); }
<!-- 视图中绑定到存Type的字符串属性 --> <select asp-for="Accomodation.Type" asp-items="Model.AccomodationTypesTypes()"></select>
同样建议直接给绑定属性设默认值,可靠性更高:
Accomodation.Type = "B";
内容的提问来源于stack exchange,提问作者Cooz
相关产品推荐
相关产品推荐

