我在mvc5 app中使用种子创建了一些演示用户和一些角色。成功将用户分配给少数角色。一切正常。现在我想要但我不知道如何构建用户管理,ui接口将负责
角色将被硬编码(RoleOne,RoleTwo,RoleThree)。
我正在考虑使用自定义viewmodel创建视图,该视图只需要很少的属性
Username
Password
Email
视图中的和分配槽的角色列表复选框。
问题是:如何在viewmodel上构建此Roles属性以及如何在post控制器操作端接收已检查的角色?
答案 0 :(得分:3)
您的问题归结为一个用例,您希望在viewmodel中发布一个子项集合,其中子项代表UI中的复选框。
为您的视图创建一个viewmodel,您将在其中创建用户并同时分配角色。
public class AddUserRoleVM
{
public string UserName { set; get; }
public List<UserRoleVM> Roles { set; get; }
public AddUserRoleVM()
{
Roles=new List<UserRoleVM>();
}
}
public class UserRoleVM
{
public int RoleId { set; get; }
public String RoleName { set; get; }
public bool IsSelected { set; get; }
}
现在,在您的GET操作中,创建AddUserRoleVM
视图模型的目标,初始化Roles
collections属性并将其发送到视图。
public ActionResult Roles()
{
var vm = new AddUserRoleVM();
vm.Roles = GetRoles();
return View(vm);
}
private List<UserRoleVM> GetRoles()
{
//Hard coded for demo.You should get the roles from db
return new List<UserRoleVM>
{
new UserRoleVM {RoleId = 1, RoleName = "Admin"},
new UserRoleVM {RoleId = 2, RoleName = "Editor"}
};
}
现在在EditorTemplates
下创建一个名为Views/YourControllerName
的文件夹。然后在名为UserRoleVM.cshtml
的内容下创建一个新视图,其中包含以下内容。
@model ReplaceYourNamespaceHere.UserRoleVM
<div>
@Html.HiddenFor(s=>s.RoleId)
<label>@Model.RoleName</label>
@Html.CheckBoxFor(s=>s.IsSelected)
</div>
现在在我们的主视图(Roles.cshtml)中,使用Html.EditorFor
HTML帮助器方法来显示此视图。
@model YourNameSpaceHere.AddUserRoleVM
<h2>Create User</h2>
@using (Html.BeginForm())
{
<label>UserName : </label> @Html.TextBoxFor(s=>s.UserName)
<label>Roles:</label>
@Html.EditorFor(s=>s.Roles)
<input type="submit"/>
}
现在,当您发布表单数据时,请检查已发布模型的角色集合,并验证每个项目的IsSelected
属性。
干杯!