MVC3 Список флажков для управления ролями - PullRequest
3 голосов
/ 25 января 2012

Я пытаюсь управлять ролями в приложении 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);
    }

Я надеялся, что существует EditorForдля MultiSelectList, и все это будет обработано для меня.Но, похоже, это не так.Он просто выводит текст false для каждой из моих ролей.

Каков наилучший способ создать этот список флажков и отправить проверенные вместе с именем пользователя на сервер?

1 Ответ

7 голосов
/ 25 января 2012

Модель:

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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...