MVC3角色管理复选框列表

本文关键字:列表 复选框 管理 角色 MVC3 | 更新日期: 2023-09-27 18:21:16

我正在尝试管理MVC3应用程序中的角色。这个想法是,我有一个用户列表,当我单击行上的编辑角色按钮时,我会得到一个模式窗口,其中列出了所有可能的角色,其中选中了用户所属的角色。

然后,我可以选择新的角色并单击保存,然后将ajax帖子发送回服务器以保持更改。

我弹出了模式,但我不知道如何生成复选框,以便在更改后轻松提交回服务器。我想要尽可能简单的解决方案。

以下是当您单击编辑角色:时,我对模态填充的部分视图的看法

public ActionResult ChooseRolePartial(string username)
    {
        var userRoles = Roles.GetRolesForUser(username);
        var list = new MultiSelectList(Roles.GetAllRoles());
        foreach (var item in list)
        {
            item.Selected = userRoles.Contains(item.Value);
        }
        var model = new ChooseRoleModel
        {
             Roles = list,
             Username = username
        };
        return PartialView("Partials/ChooseRolePartial", model);
    }

我本来希望有一个MultiSelectList的EditorFor,一切都会由我来处理。但事实并非如此。它只是使我的每个角色的文本都是假的。

生成此复选框列表并将选中的内容和用户名一起提交回服务器的最佳方法是什么

MVC3角色管理复选框列表

型号:

public class ChooseRoleModel
{
    public SelectListItem[] Roles { get; set; }
    public string Username { get; set; }
}

控制器:

public class RolesController : Controller
{
    ...
    public ActionResult ChooseRolePartial(string username)
    {
        var userRoles = Roles.GetRolesForUser(username);
        var roles = Roles.GetAllRoles().Select(x => new SelectListItem
        {
            Value = x,
            Text = x,
            Selected = userRoles.Contains(x)
        }).ToArray();
        var model = new ChooseRoleModel
        {
            Roles = roles,
            Username = username
        };
        return PartialView("Partials/ChooseRolePartial", model);
    }
    [HttpPost]
    public ActionResult ChooseRolePartial(ChooseRoleModel model)
    {
        ...
    }
}

视图:

@model ChooseRoleModel
@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.Username)
        @Html.EditorFor(x => x.Username)
    </div>
    for (int i = 0; i < Model.Roles.Length; i++)
    {
        @Html.CheckBoxFor(x => x.Roles[i].Selected)    
        @Html.LabelFor(x => x.Roles[i].Selected, Model.Roles[i].Text)
        @Html.HiddenFor(x => x.Roles[i].Text)
    }
    <button type="submit">OK</button>
}