.NET 6中如何设置SelectListItem为选中状态?
解决DropDownList默认选中值不生效的问题
问题原因
ASP.NET Core的asp-for标签助手会优先绑定模型属性的值,直接修改SelectListItem的Selected属性会被覆盖,因此无法生效。
解决方案
方法一:通过模型属性绑定(推荐)
如果页面使用ViewModel,直接在控制器中给对应属性赋值,asp-for会自动匹配选中对应选项:
- 控制器代码:
// 假设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);
- 视图代码(确保
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.
相关产品推荐
相关产品推荐

