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

如何在cshtml视图中正确设置SelectList下拉框的默认选中项

问题根本原因

  1. 优先级问题:ASP.NET Core的select Tag Helper会优先使用asp-for绑定的属性值作为选中项,你在SelectList构造函数中指定的默认选中值优先级更低,会被覆盖。
  2. 类型/值不匹配:你当前构造的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:36:01