创建用户角色MVC5 razor的复选框列表

时间:2015-07-14 06:47:12

标签: c# asp.net-mvc razor sqlmembershipprovider

我试图在视图中显示应用程序角色的复选框列表。

我不确定如何使用从aspnet_roles表中提取的所有角色来填充视图。

如果我使用下面的代码,我会得到null引用异常,因为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>
}

提前谢谢。

1 个答案:

答案 0 :(得分: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();