selectlistitem mvc framework ejemplos dropdownlist c# asp.net-mvc-4 razor html.dropdownlistfor

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



selectlist mvc (7)

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

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


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 .


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>


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.


Una forma podría ser;

<select name="listbox" id="listbox"> @foreach (var item in Model) { <option value="@item.UserRoleId"> @item.UserRole </option> } </select>


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


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