c# dropdownlist - Llenar una lista desplegable de maquinilla de afeitar de una lista <objeto> en MVC




4 Answers

Puede separar su lógica de negocios en un modelo de vista, por lo que su vista tiene una separación más clara.

Primero crea un modelo de vista para almacenar el ID que el usuario seleccionará junto con una lista de elementos que aparecerán en DropDown .

ViewModel:

public class UserRoleViewModel
{
    // Display Attribute will appear in the Html.LabelFor
    [Display(Name = "User Role")]
    public int SelectedUserRoleId { get; set; }
    public IEnumerable<SelectListItem> UserRoles { get; set; }
}

Referencias

Dentro del controlador crea un método para obtener tu lista UserRole y transformarla en el formulario que se presentará en la vista.

Controlador:

private IEnumerable<SelectListItem> GetRoles()
{
    var dbUserRoles = new DbUserRoles();
    var roles = dbUserRoles
                .GetRoles()
                .Select(x =>
                        new SelectListItem
                            {
                                Value = x.UserRoleId.ToString(),
                                Text = x.UserRole
                            });

    return new SelectList(roles, "Value", "Text");
}

public ActionResult AddNewUser()
{
    var model = new UserRoleViewModel
                    {
                        UserRoles = GetRoles()
                    };
    return View(model);
}

Referencias

Ahora que se crea el modelo de vista, la lógica de presentación se simplifica

Ver:

@model UserRoleViewModel

@Html.LabelFor(m => m.SelectedUserRoleId)
@Html.DropDownListFor(m => m.SelectedUserRoleId, Model.UserRoles)

Referencias

Esto producirá:

<label for="SelectedUserRoleId">User Role</label>
<select id="SelectedUserRoleId" name="SelectedUserRoleId">
    <option value="1">First Role</option>
    <option value="2">Second Role</option>
    <option value="3">Etc...</option>
</select>
@html.dropdownlistfor selected

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




Una forma podría ser;

    <select name="listbox" id="listbox">
    @foreach (var item in Model)
           {

                   <option value="@item.UserRoleId">
                      @item.UserRole 
                   </option>                  
           }
    </select>



En lugar de una List<UserRole> , puede dejar que su Modelo contenga una SelectList<UserRole> . También agregue una propiedad SelectedUserRoleId para almacenar ... bueno ... el valor Id de la UserRole seleccionada.

Complete la lista de selección, luego en su uso de vista:

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

y deberías estar bien.

Consulte también http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx .




   @{
        List<CategoryModel> CategoryList = CategoryModel.GetCategoryList(UserID);
        IEnumerable<SelectListItem> CategorySelectList = CategoryList.Select(x => new SelectListItem() { Text = x.CategoryName.Trim(), Value = x.CategoryID.Trim() });
    }
    <tr>
        <td>
            <B>Assigned Category:</B>
        </td>
        <td>
            @Html.DropDownList("CategoryList", CategorySelectList, "Select a Category (Optional)")
        </td>
    </tr>



Related

c# asp.net-mvc-4 razor html.dropdownlistfor