2015-07-14 3 views
0

J'essaie d'afficher une liste de cases à cocher des rôles d'application dans une vue.Créer une liste de contrôle des rôles utilisateur MVC5 razor

Je ne suis pas sûr de savoir comment remplir la vue avec tous les rôles que je tire de la table aspnet_roles.

Si j'utilise le code ci-dessous, j'obtiens une exception de référence null car ApplicationRoles est vide.

Pourriez-vous m'aider s'il vous plaît ou me guider de ce qui est le meilleur moyen d'y parvenir?

code ViewModel est

public class UserViewModel 
{ 
    public string UserName { get; set; } 
    public List<aspnet_Roles> ApplicationRoles { get; set; } 
} 

et dans le contrôleur que je suis en train de les charger en utilisant le code suivant

public ActionResult Create() 
{ 
    UserViewModel user = new UserViewModel(); 
    user.ApplicationRoles = db.aspnet_Roles.ToList(); 

    ViewBag.ApplicationRoles = new SelectList(db.aspnet_Roles.ToList(),"RoleId","RoleName"); 
     return View(); 
} 

Vu c'est

@using Test.Web.Models; 
@model Test.Web.Models.UserViewModel 

@using (Html.BeginForm("Create", "Users", FormMethod.Post)) 
{ 
@Html.ValidationSummary(true) 
    <div> 
    <div> 
     @Html.LabelFor(model => model.UserRole}) 
     <div> 
      @for (var i = 0; i < Model.ApplicationRoles.Count(); i++) 
      { 
        var role = Model.ApplicationRoles[i]; 
        @Html.HiddenFor(model => model.ApplicationRoles[i].RoleId) 
        @Html.CheckBoxFor(model => model.ApplicationRoles[i].RoleId) 
        @Html.LabelFor(model => model.ApplicationRoles[i].RoleName) 
      } 
     </div> 
    </div> 
    </div> 
} 

Merci à l'avance.

+0

Votre ne pas retourner votre modèle à la vue, donc 'Model.ApplicationRoles.Count()' déclenche une exception car 'Ap plicationRoles' est 'null'. Il doit être 'return View (user);' dans votre méthode 'Create()' –

+0

Et une fois que vous aurez corrigé cela, cela ne fonctionnera toujours pas car vous avez '@ Html.HiddenFor (model => model.ApplicationRoles [i] .RoleId) 'avant' @ Html.CheckBoxFor (model => model.ApplicationRoles [i] .RoleId) 'ce qui signifie que dans la méthode POST, vous ne récupérerez que la valeur initiale de' RoleId' - la valeur des cases à cocher sera ignoré. –

Répondre

0

Je Gess votre problème dans cette ligne:

@for (var i = 0; i < UserViewModel.ApplicationRoles.Count(); i++) 

il devrait être

@for (var i = 0; i < Model.ApplicationRoles.Count(); i++) 

Et dans votre Controller vous devez passer votre ViewModel-View:

ViewData.Model = user; 
return View(); 
+0

Merci d'avoir fait ce que vous avez suggéré mais j'ai quand même l'erreur 'System.NyllReferenceException' – snowflakes74

+0

@ snowflakes74 update –