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 de la lista para mostrar usando un @foreach
bucle como se muestra a continuación:
@foreach (var item in Model)
{
<tr>
<td>
@item.UserRoleId
</td>
<td>
@item.UserRole
</td>
</tr>
}
Pero, ¿cómo rellenar una lista desplegable con el modelo que se pasa, he intentado
@Html.DropDownListFor(x => x.UserRole)
Pero no tengo suerte.
var roles = dbUserRoles.GetRoles() ...
cuando elGetRoles
método se encuentra en el controlador, mientras quedbUserRoles
es una instancia de la clase de modelo?fuente
using System.Linq;
para obtener el método de extensión Seleccionar.Una forma podría ser;
fuente
Algo cercano a:
Necesita una SelectList para completar DropDownListFor. Para cualquier atributo HTML que necesite, puede agregar:
fuente
En lugar de a
List<UserRole>
, puede dejar que su Modelo contenga aSelectList<UserRole>
. Agregue también una propiedadSelectedUserRoleId
para almacenar ... bueno ... el valor de Id de UserRole seleccionado.Rellene la Lista de selección, luego en su Vista use:
y deberías estar bien.
Consulte también http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx .
fuente
Su llamado a
DropDownListFor
necesita algunos parámetros más para desarrollarlo. Necesita una SelectList como en la siguiente pregunta SO:MVC3 DropDownListFor: ¿un ejemplo simple?
Con lo que tiene allí, solo le ha dicho dónde almacenar los datos, no desde dónde cargar la lista.
fuente
fuente
Voy a abordar esto como si tuviera un modelo de Usuarios:
Users.cs
y un modelo DbUserRoles que representaba una tabla con ese nombre en la base de datos:
DbUserRoles.cs
Una vez que haya limpiado eso, debería poder crear y completar una colección de Roles de usuario, como este, en su Controlador:
y tiene estas funciones de soporte:
Repository.cs
Mi función de repositorio
GetAllUserRoles()
para la función, arriba:AddNewUser.cshtml
Luego haz esto en tu Vista:
fuente
fuente
EmployeeViewModel
yEmployee
, sin embargo, mostrar los objetos allí y sus tipos.