我遇到需要使用以下代码填充下拉列表的情况。我通过设置在一种情况下使用此代码(并按预期获得所有用户的列表):
var users = Membership.GetAllUsers();
但如果我使用
var users = Roles.GetUsersInRole("MyRole");
我的下拉列表不会填充任何用户(我确定我的用户已列出所列用的角色)。
我是否需要将控制器更改为使用“MemberShipUser”以外的其他类型?
我是否需要以完全不同的方式处理这种情况,因为我使用的是角色而不是用户列表?
这是我的代码 -
控制器:
var users = Roles.GetUsersInRole("MyRole");
var model = new CreateStudentViewModel
{
Users = users.OfType<MembershipUser>().Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.UserName,
})
};
视图模型:
public class MyViewModel
{
[Display(Name = "selected user")]
public string SelectedUser { get; set; }
public IEnumerable<SelectListItem> Users { get; set; }
}
查看:
<div class="editor-label">
@Html.LabelFor(model => model.SelectedUser)
</div>
<div class="editor-field">
@Html.LabelFor(x => x.SelectedUser)
@Html.DropDownListFor(x => x.SelectedUser, Model.Users)
</div>
答案 0 :(得分:1)
Roles.GetUsersInRole("MyRole")
返回string[]
而不是MembershipUser
的列表。
users.OfType<MembershipUser>()
为您提供空枚举。
在调用方法之前检查方法返回类型,或RTM; - )
答案 1 :(得分:0)
尝试:
@Html.DropDownList("SelectedUsers", new SelectList((IEnumerable<SelectListItem>)ViewData["Users"], "Id", "Name"))
控制器中的位置:
ViewData["Users"] = Roles.GetUsersInRole("MyRole");