如何在 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>

但它不起作用。谁能告诉我这个问题?

如何在 ASP MVC5 Razor 中将列表显示为下拉列表

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值与选项的某个值匹配,则会在生成视图时选择该值。

编辑

根据您的注释,您希望绑定到 IdentityRoleId 属性,在这种情况下,代码需要

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>