J'ai un modèle:
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;
}
}
Et voici le contrôleur qui charge la vue:
//
// GET: /Admin/AddNewUser
public ActionResult AddNewUser()
{
DbUserRoles Roles = new DbUserRoles();
return View(Roles.GetRoles());
}
Je peux afficher les éléments de la liste à l'aide d'une @foreach
boucle comme indiqué ci-dessous:
@foreach (var item in Model)
{
<tr>
<td>
@item.UserRoleId
</td>
<td>
@item.UserRole
</td>
</tr>
}
Mais comment remplir une liste déroulante avec le modèle qui est passé, j'ai essayé
@Html.DropDownListFor(x => x.UserRole)
mais je n'ai pas de chance.
var roles = dbUserRoles.GetRoles() ...
lorsque laGetRoles
méthode est située dans le contrôleur, alorsdbUserRoles
qu'une instance de la classe de modèle?la source
using System.Linq;
pour obtenir la méthode d'extension Select.Une façon pourrait être;
la source
Quelque chose de proche de:
Vous avez besoin d'un SelectList pour remplir le DropDownListFor. Pour tous les attributs HTML dont vous avez besoin, vous pouvez ajouter:
la source
Au lieu de a
List<UserRole>
, vous pouvez laisser votre modèle contenir un fichierSelectList<UserRole>
. Ajoutez également une propriétéSelectedUserRoleId
à stocker ... eh bien ... la valeur Id de UserRole sélectionnée.Remplissez la SelectList, puis dans votre View utilisez:
et vous devriez être bien.
Voir également http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx .
la source
Votre appel à a
DropDownListFor
besoin de quelques paramètres supplémentaires pour l'étoffer. Vous avez besoin d'une SelectList comme dans la question SO suivante:MVC3 DropDownListFor - un exemple simple?
Avec ce que vous avez là-bas, vous lui avez seulement indiqué où stocker les données, pas où charger la liste.
la source
la source
Je vais aborder cela comme si vous aviez un modèle Users:
Users.cs
et un modèle DbUserRoles qui représentait une table de ce nom dans la base de données:
DbUserRoles.cs
Une fois que vous avez nettoyé cela, vous devriez simplement pouvoir créer et remplir une collection de UserRoles, comme ceci, dans votre Controller:
et ont ces fonctions de support:
Repository.cs
Fonction My Repository
GetAllUserRoles()
pour la fonction, ci-dessus:AddNewUser.cshtml
Ensuite, faites ceci dans votre vue:
la source
la source
EmployeeViewModel
etEmployee
, cependant, montrer les objets là-bas, et leurs types.