2

我有一種情況,我需要使用下面的代碼填充下拉列表。我用這個代碼在一種情況下通過設置(和我預期所有用戶的列表):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> 
+0

我看到我接近的情況不正確 - 這篇文章http://stackoverflow.com/a/9157588/1026898提到「如果你想將返回的用戶名映射到MembershipUser,你可以在每個返回的值上使用Membership.GetUser(字符串用戶名)方法。」 - 但我不確定我會如何得到一個列表 - 我知道如何獲得一個用戶,但不是一個列表。 – Ecnalyr 2012-03-09 14:52:55

回答

1

Roles.GetUsersInRole("MyRole")回報string[]ñ列表MembershipUser s。

users.OfType<MembershipUser>()給你空的枚舉。

檢查方法的返回類型打電話之前,或RTM ;-)

+0

Touché。有效點。 – Ecnalyr 2012-03-09 14:37:15

0

嘗試:

@Html.DropDownList("SelectedUsers", new SelectList((IEnumerable<SelectListItem>)ViewData["Users"], "Id", "Name")) 

凡在你的控制器:

ViewData["Users"] = Roles.GetUsersInRole("MyRole"); 
+0

不會工作,因爲Roles.GetUsersInRole返回一個字符串,而不是成員列表。 「無法投射'System.String []'類型的對象來鍵入'System.Collections.Generic.IEnumerable'1 [System.Web.Mvc.SelectListItem]'。」 – Ecnalyr 2012-03-09 14:51:36