2015-07-14 6 views
0

Я пытаюсь показать список ролей приложений в представлении.Создать checkboxlist для пользовательских ролей MVC5 razor

Я не уверен, как заполнить представление всеми ролями, которые я вытаскиваю из таблицы aspnet_roles.

Если я использую приведенный ниже код, я получаю пустое ссылочное исключение, потому что ApplicationRoles пуст.

Может ли кто-нибудь помочь мне или помочь мне в том, что является лучшим способом достичь этого?

код ViewModel является

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

и контроллер Я пытаюсь загрузить их с помощью следующего кода

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(); 
} 

Учитывая это

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

Спасибо заранее.

+0

Ваш не возвращаются ваша модель для представления, поэтому 'Model.ApplicationRoles.Count()' выдает исключение, потому что 'Ap plicationRoles' является 'null'. Он должен быть 'return View (user);' в вашем методе 'Create()' –

+0

И как только вы его исправите, он все равно не будет работать, потому что у вас есть '@ Html.HiddenFor (model => model.ApplicationRoles [i] .RoleId) 'before' @ Html.CheckBoxFor (model => model.ApplicationRoles [i] .RoleId)', что означает, что в методе POST вы получите только начальное значение 'RoleId' - значение флажков будут проигнорированы. –

ответ

0

Я Гесс вашей проблемы в этой строке:

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

должен быть

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

И в вашем Controller вы должны передать ваши ViewModel в View:

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

Спасибо, что я сделал, как вы и предложили, но все равно получите ошибку «System.NyllReferenceException» – snowflakes74

+0

@ snowflakes74 update –

 Смежные вопросы

  • Нет связанных вопросов^_^