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

时间:2019-01-20 16:50:23

标签: c# asp.net asp.net-core asp.net-core-mvc

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

https://imgur.com/a/CYZSO5z

我在做什么错了?

ViewModel:

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

public string RoleId { get; set; }

控制器:

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

查看:     

<select asp-for="RoleId" asp-items="@Model.SelectRole" class="form-control" />

1 个答案:

答案 0 :(得分:1)

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

<select asp-for="RoleId" asp-items="@Model.SelectRole" class="form-control" />

它将无法正确生成选择列表。

您可以如下调整代码:

在ViewModel中:

public SelectList RoleSelectList { get; set; }

public string RoleId { get; set; }

在控制器方法中:

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

在视图中:

<select asp-for="RoleId" asp-items="Model.RoleSelectList" class="form-control">
   <option value="">Select Role</option>
</select>

现在一切正常。