我正在学习Asp.Net MVC。处理下拉列表时我遇到了一个小问题。
我不想列出具有管理员角色的用户
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.Func',因为块中的某些返回类型不能隐式转换为委托返回类型
错误1无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'bool'
答案 0 :(得分:0)
首先,您应该过滤查询以仅获取非管理员用户:
var user = db.Users.Where(user => user.Role.Name != "Admin").ToList();
您必须在控制器中创建List<SelectListItem>
,如下所示:
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;
在剃刀视图中,您必须创建<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>
答案 1 :(得分:0)
您可以直接加载所有非管理员用户,并避免过滤代码中的数据。
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
DbSet访问db.UserRoles
表。
答案 2 :(得分:0)
您只需将数据库分配给选择列表中的&#34; user&#34; 即可。
像这样:
ViewBag.UserId = new SelectList(db.Users.Where(u => u.Roles.Where(r => r.RoleId != "1")), "Id", "UserName");
希望它有效。