我正在学习Asp。净MVC。我在处理下拉列表时遇到了一个小问题。
我不想列出具有Admin角色的用户
public ActionResult Create()
{
var user = db.Users.Where(u => u.Roles.Where(r => r.RoleId != "1"));
ViewBag.UserId = new SelectList(user, "Id", "UserName");
return View();
}
我得到这个错误
错误2无法将lambda表达式转换为委托类型'System '。因为块中的一些返回类型不能隐式地转换为委托返回类型
错误1无法隐式转换类型"System.Collections.Generic"。IEnumerable' to 'bool'
首先你应该过滤你的查询只得到非管理员用户:
var user = db.Users.Where(user => user.Role.Name != "Admin").ToList();
你必须像这样创建一个List<SelectListItem>
in控制器:
dropdownItems.AddRange(new[]
{
new SelectListItem() {Text = "User1", Value = "1", Selected = true },
new SelectListItem() {Text = "User2", Value = "2", Selected = false },
new SelectListItem() {Text = "User3", Value = "3", Selected = false }
});
ViewBag.DropDownItems = dropdownItems;
在razor视图中,你必须像这样创建<select>
标签:
<select name="Users" id="Users">
@foreach (var selectListItem in ViewBag.DropDownItems as List<SelectListItem>)
{
<option value="@selectListItem.Value" selected="@selectListItem.Selected">@selectListItem.Text</option>
}
</select>
您可以直接加载所有非管理员用户,避免在代码中过滤数据。
public ActionResult Create() {
// Get the Id for the "Admin" role
int AdminRoleID = db.Roles.First(r => r.Name == "Admin").Id;
// Get the users that don't have the role "Admin"
var user = db.Users.Where(u => db.UserRoles.Where(r => r.roleId != AdminRoleID).Select(r => r.UserId).Contains(u.Id));
ViewBag.UserId = new SelectList(user, "Id", "UserName");
return View();
}
注:假设UserRoles
表被db.UserRoles
DbSet访问
你可以在你的selectlist中将db分配给"user"。
:
ViewBag.UserId = new SelectList(db.Users.Where(u => u.Roles.Where(r => r.RoleId != "1")), "Id", "UserName");