SelectListItem no se completa cuando utilizo Roles.GetUsers.InRole ("MyRole"), pero se completa si uso Membership.GetAllUsers ()

Tengo una situación en la que necesito completar una lista desplegable con el siguiente código. Uso este código en una situación configurando (y obtengo una lista de todos los usuarios como se esperaba):

var users = Membership.GetAllUsers();

pero si uso

var users = Roles.GetUsersInRole("MyRole");

mi menú desplegable no se completa con ningún usuario (estoy seguro de que tengo usuarios en el rol enumerado).

¿Necesito cambiar mi controlador para usar un tipo diferente además de "MemberShipUser"?

¿Debo abordar la situación de una manera completamente diferente ya que estoy usando roles en lugar de una lista de usuarios?

Aquí está mi código:

Controlador:

var users = Roles.GetUsersInRole("MyRole");
var model = new CreateStudentViewModel
{
    Users = users.OfType<MembershipUser>().Select(x => new SelectListItem
    {
        Value = x.UserName,
        Text = x.UserName,
    })
};

Ver modelo:

public class MyViewModel
{
    [Display(Name = "selected user")]
    public string SelectedUser { get; set; }
    public IEnumerable<SelectListItem> Users { get; set; }
}

Vista

    <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>

preguntado el 09 de marzo de 12 a las 14:03

Veo que me estoy acercando a la situación incorrectamente: esta publicación stackoverflow.com/a/9157588/1026898 menciona "Si desea asignar el nombre de usuario devuelto a un MembershipUser, puede usar el método Membership.GetUser (nombre de usuario de cadena) en cada uno de los valores devueltos". - pero no estoy exactamente seguro de cómo obtendría una lista de eso - Sé cómo obtener un usuario, pero no una lista. -

2 Respuestas

Roles.GetUsersInRole("MyRole") devoluciones string[] no lista de MembershipUsers.

users.OfType<MembershipUser>() te da una enumeración vacía.

Verifique el tipo de devolución del método antes de llamarlo, o RTM ;-)

respondido 09 mar '12, 14:03

Tratar:

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

Donde en su controlador:

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

respondido 09 mar '12, 14:03

No funcionará porque Roles.GetUsersInRole devuelve una cadena, no una lista de miembros. "No se puede convertir el objeto de tipo 'System.String[]' para escribir 'System.Collections.Generic.IEnumerable`1[System.Web.Mvc.SelectListItem]'". - Ecnalyr

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.