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

.NET 6中如何设置SelectListItem为选中状态?

解决DropDownList默认选中值不生效的问题

问题原因

ASP.NET Core的asp-for标签助手会优先绑定模型属性的值,直接修改SelectListItem的Selected属性会被覆盖,因此无法生效。

解决方案

方法一:通过模型属性绑定(推荐)

如果页面使用ViewModel,直接在控制器中给对应属性赋值,asp-for会自动匹配选中对应选项:

  1. 控制器代码:
// 假设ViewModel包含int? categoryID属性
var viewModel = new YourViewModel();
viewModel.categoryID = 2; // 设置默认选中的Category的Id

var selectList = _db.Category.Select(i => new SelectListItem()
{
    Text = i.Name,
    Value = i.Id.ToString()
});
ViewBag.categoriesSelectList = selectList;

return View(viewModel);
  1. 视图代码(确保asp-for指向ViewModel的对应属性):
<select asp-for="categoryID" asp-items="@ViewBag.categoriesSelectList" class="form-control">
    <option>Vælg Kategori:</option>
</select>

方法二:用SelectList类指定选中值

构造SelectList时直接传入默认选中的Value,替代手动创建SelectListItem集合:

控制器代码:

var categories = _db.Category.ToList();
// 参数依次为:数据源、Value字段名、Text字段名、默认选中值
ViewBag.categoriesSelectList = new SelectList(categories, "Id", "Name", 2);

视图代码:

<select name="categoryID" asp-items="@ViewBag.categoriesSelectList" class="form-control">
    <option>Vælg Kategori:</option>
</select>

注意:如果同时使用asp-for,模型属性值会优先于SelectList中设置的选中值。

方法三:手动遍历生成选项(不推荐)

放弃asp-items,手动遍历选项并判断添加selected属性:

视图代码:

<select name="categoryID" class="form-control">
    <option>Vælg Kategori:</option>
    @foreach (var item in ViewBag.categoriesSelectList as IEnumerable<SelectListItem>)
    {
        <option value="@item.Value" @(item.Value == "2" ? "selected" : "")>@item.Text</option>
    }
</select>

内容的提问来源于stack exchange,提问作者J.B.J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:18:42