如何在 ASP MVC5 Razor 中将列表显示为下拉列表
本文关键字:列表显示 下拉列表 Razor ASP MVC5 | 更新日期: 2023-09-27 18:27:28
我想将角色列表显示为下拉列表。
List<IdentityRole> roles = ContextManager.getApplicationDbContext().Roles.ToList();
IdentityRole defaultRole = roles.Find(item => item.Id == "salesManId");
ViewBag.Role = new SelectList(roles, "Role", "Role", defaultRole);
我的剃须刀代码是:
<div class="form-group">
@Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownList("Role", ViewBag.Role)
</div>
</div>
但它不起作用。谁能告诉我这个问题?
IdentityRole
不包含名为 Role
的属性(但它确实有一个名为 Name
的角色名称(,并且由于您还对属性和显示文本value
选项使用相同的值,因此控制器代码应该只是
IEnumerable<string> roles = ContextManager.getApplicationDbContext().Roles.Select(r > r.Name);
ViewBag.RoleList = new SelectList(roles);
请注意,ViewBag
名称不应与绑定到的属性的名称相同。然后在视图中,使用
@Html.DropDownListFor(m => m.Role, (SelectList)ViewBag.RoleList)
如果您的媒体资源Role
值与选项的某个值匹配,则会在生成视图时选择该值。
编辑
根据您的注释,您希望绑定到 IdentityRole
的 Id
属性,在这种情况下,代码需要
IEnumerable<IdentityRole> roles = ContextManager.getApplicationDbContext().Roles;
ViewBag.RoleList = new SelectList(roles, "Id", "Name");
并在生成视图时选择默认值
model.Role = roles.Where(r => r.Id == "salesManId").Select(r => r.Id);
// or just model.Role = "salesManId";
return View(model);
List<IdentityRole> roles = ContextManager.getApplicationDbContext().Roles.ToList();
IdentityRole defaultRole = roles.Find(item => item.Id == "salesManId");
ViewBag.RoleList = new SelectList(roles, "Role", "Role", defaultRole);
<div class="form-group">
@Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownList("RoleList")
</div>
</div>