Я пытаюсь показать список ролей приложений в представлении.Создать 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>
}
Спасибо заранее.
Ваш не возвращаются ваша модель для представления, поэтому 'Model.ApplicationRoles.Count()' выдает исключение, потому что 'Ap plicationRoles' является 'null'. Он должен быть 'return View (user);' в вашем методе 'Create()' –
И как только вы его исправите, он все равно не будет работать, потому что у вас есть '@ Html.HiddenFor (model => model.ApplicationRoles [i] .RoleId) 'before' @ Html.CheckBoxFor (model => model.ApplicationRoles [i] .RoleId)', что означает, что в методе POST вы получите только начальное значение 'RoleId' - значение флажков будут проигнорированы. –