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, 
    }) 
}; 

のViewModel:

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

私は状況に近づいています参照してください。あなたのコントローラに

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

間違って - この投稿http://stackoverflow.com/a/9157588/1026898 "返された各ユーザー名をMembershipUserにマップする場合は、返された値ごとにMembership.GetUser(string username)メソッドを使用できます。 - しかし、私はそれからリストを得る方法を正確には分かっていません - 私はどのように1人のユーザを得るか知っていますが、リストは知りません。 – Ecnalyr

答えて

1

Roles.GetUsersInRole("MyRole")戻りstring[] N MembershipUserのリスト。

users.OfType<MembershipUser>()は空の列挙を与えます。

あなたはそれを呼び出す前に、メソッドの戻り値の型を確認するか、RTM ;-)

+0

タッチ。有効なポイント。 – Ecnalyr

0

試してみてください。

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

Roles.GetUsersInRoleはメンバーのリストではなく文字列を返すため、動作しません。 "タイプ 'System.String []'のオブジェクトを 'System.Collections.Generic.IEnumerable'1 [System.Web.Mvc.SelectListItem]'とタイプしてキャストできません。" – Ecnalyr

関連する問題