在ASP.NET Core中填充下拉列表

Sup*_*lle 0 c# asp.net asp.net-core-mvc asp.net-core

我的下拉列表有问题。它始终为空,即使在调试时,列表中有4个不同的条目也在asp-items中设置,如下所示:

https://imgur.com/a/CYZSO5z

我究竟做错了什么?

ViewModel:

public IEnumerable<SelectListItem> SelectRole { get; set; }

public string RoleId { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器:

 model.SelectRole = _roleManager.Roles?.Select(s => new SelectListItem
 {
     Value = s.Id,
     Text = s.Name
 });
Run Code Online (Sandbox Code Playgroud)

视图:

<select asp-for="RoleId" asp-items="@Model.SelectRole" class="form-control" />
Run Code Online (Sandbox Code Playgroud)

Tan*_*jel 5

问题是您正在使用select如下所示的自闭标签:

<select asp-for="RoleId" asp-items="@Model.SelectRole" class="form-control" />
Run Code Online (Sandbox Code Playgroud)

它不会正确生成选择列表。

您可以按以下方式调整代码:

在ViewModel中:

public SelectList RoleSelectList { get; set; }

public string RoleId { get; set; }
Run Code Online (Sandbox Code Playgroud)

在控制器方法中:

var roleList = _roleManager.Roles.Select(r => new {r.Id, r.Name}).ToList();
model.RoleSelectList = new SelectList(roleList, "Id","Name");
Run Code Online (Sandbox Code Playgroud)

在视图中:

<select asp-for="RoleId" asp-items="Model.RoleSelectList" class="form-control">
   <option value="">Select Role</option>
</select>
Run Code Online (Sandbox Code Playgroud)

现在一切正常。