已在我的身份用户声明中添加了全名:
public string Fullname { get { return this.Firstname + " " + this.Lastname; } }
现在我正在尝试填充所有用户的下拉列表(全名)
在我的控制器中,我有:
var users = Roles.GetUsersInRole("*");
SelectList list = new SelectList(users);
ViewBag.Users = list;
在我看来,我有:
@Html.DropDownList("Users", ViewBag.Users as SelectList);
但是在我的视图中突出显示“用户”时出现错误。
System.InvalidOperationException:'没有类型的ViewData项 具有密钥“用户”的“ IEnumerable”。
是否有更好的方法来归档我要执行的操作?请帮助
答案 0 :(得分:1)
尝试使用
@Html.DropDownList("Users", "Users list");
答案 1 :(得分:1)
尝试创建如下所示的列表。为“文本和值”选择一个适当的值。
var users = Roles.GetUsersInRole("*");
var list = users.Select(x => new SelectListItem(){ Text = x.FullName, Value = x.FullName);
ViewBag.Users = list;
答案 2 :(得分:0)
Roles.GetUsersInRole()
返回string[]
数组,您可以使用重载的Enumerable.Select()
方法从中创建SelectList
:
var users = Roles.GetUsersInRole("RoleName");
var list = users.Select((x, index) => new SelectListItem { Text = x, Value = index.ToString() });
ViewBag.Users = list;
从具有指定角色的用户那里获得SelectList
的替代方法应该是这样的:
var users = Roles.GetUsersInRole("RoleName").Select(Membership.GetUser).ToList();
var list = users.Select(x => new SelectListItem { Text = x.UserName, Value = Membership.GetUser(x.UserName).ProviderUserKey.ToString() }).ToList();
ViewBag.Users = list;
注意:对于ASP.NET Identity 2,您可以将Users
和Roles
与数据上下文一起使用来创建SelectList
,如下例所示:>
using (var context = new ApplicationDbContext())
{
var users = from u in context.Users
where u.Roles.Any(r => r.Role.Name == "RoleName")
select u;
// ViewBag.Users = new SelectList(users, "Id", "UserName");
ViewBag.Users = users.Select(x => new SelectListItem { Text = x.UserName, Value = x.Id }).ToList();
}