SelectListItem не заполняется при использовании Roles.GetUsers.InRole ("MyRole"), но заполняется при использовании Membership.GetAllUsers () - PullRequest
2 голосов
/ 09 марта 2012

У меня есть ситуация, когда мне нужно заполнить раскрывающийся список с помощью приведенного ниже кода.Я использую этот код в одной ситуации, установив (и получаю список всех пользователей, как и ожидалось):

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>

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Roles.GetUsersInRole("MyRole") возвращает string[] не список MembershipUser с.

users.OfType<MembershipUser>() дает пустое перечисление.

Проверьте тип возврата метода перед его вызовом или RTM; -)

0 голосов
/ 09 марта 2012

Попробуйте:

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

Где в вашем контроллере:

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