[c#] Llenar una lista desplegable de maquinilla de afeitar de una lista <objeto> en MVC



Answers

  @Html.DropDownList("ddl",Model.Select(item => new SelectListItem
{
    Value = item.RecordID.ToString(),
    Text = item.Name.ToString(),
     Selected = "select" == item.RecordID.ToString()
}))
Question

Tengo un modelo:

public class DbUserRole
    {
        public int UserRoleId { get; set; }
        public string UserRole { get; set; }
    }

public class DbUserRoles
    {
        public List<DbUserRole> GetRoles()
        {
            BugnetReports RoleDropDown = new BugnetReports();
            List<DbUserRole> Roles = new List<DbUserRole>();
            DataSet table = RoleDropDown.userRoleDropDown();
            foreach (DataRow item in table.Tables[0].Rows)
            {
                DbUserRole ur = new DbUserRole();
                ur.UserRole = Convert.ToString(item["UserRoleName"]);
                ur.UserRoleId = Convert.ToInt32(item["UserRoleID"]);
                Roles.Add(ur);
            }
            return Roles;
        }
    }

Y aquí está el controlador que carga la vista:

        //
        // GET: /Admin/AddNewUser

        public ActionResult AddNewUser()
        {
            DbUserRoles Roles = new DbUserRoles();
            return View(Roles.GetRoles());
        }

Puedo obtener los elementos en la lista para mostrar usando un bucle @foreach como se muestra a continuación:

@foreach (var item in Model)
       {
           <tr>
               <td>
                   @item.UserRoleId
               </td>
               <td>
                   @item.UserRole
               </td>
           </tr>
       }

¿Pero cómo llene una lista desplegable con el modelo que se transfiere, lo he intentado?

@Html.DropDownListFor(x => x.UserRole)

pero no estoy teniendo suerte




Su llamada a DropDownListFor necesita unos pocos parámetros más para completarla. Necesita una lista selectiva como en la siguiente pregunta SO:

MVC3 DropDownListFor - ¿un simple ejemplo?

Con lo que tienes allí, solo le has dicho dónde almacenar los datos, no desde dónde cargar la lista.




Algo cercano a:

@Html.DropDownListFor(m => m.UserRole, 
   new SelectList(Model.Roles, "UserRoleId", "UserRole", Model.Roles.First().UserRoleId), 
   new { /* any html  attributes here */ }) 

Necesita una lista de selección para rellenar DropDownListFor. Para cualquier atributo de HTML que necesite, puede agregar:

new { @class = "DropDown", @id = "dropdownUserRole" }



Related