我有一種情況,我需要使用下面的代碼填充下拉列表。我用這個代碼在一種情況下通過設置(和我預期所有用戶的列表):SelectListItem在使用Roles.GetUsers.InRole(「MyRole」)時沒有填充,但填充如果我使用Membership.GetAllUsers()
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>
我看到我接近的情況不正確 - 這篇文章http://stackoverflow.com/a/9157588/1026898提到「如果你想將返回的用戶名映射到MembershipUser,你可以在每個返回的值上使用Membership.GetUser(字符串用戶名)方法。」 - 但我不確定我會如何得到一個列表 - 我知道如何獲得一個用戶,但不是一個列表。 – Ecnalyr 2012-03-09 14:52:55