2012-01-25 2 views
3

Я пытаюсь управлять ролями в приложении MVC3. Идея состоит в том, что у меня есть список пользователей, и когда я нажимаю кнопку «Изменить роли» в строке, я получаю модальное окно со списком всех возможных ролей с теми, которые пользователь является членом проверенного.MVC3 Список флажков для управления ролями

Затем я могу выбрать новые роли и нажать «Сохранить» и отправить сообщение ajax на сервер, чтобы сохранить изменения.

У меня есть модальное выскакивание, но я не уверен, как сгенерировать флажки так, чтобы их легко было вернуть обратно на сервер при изменении. Я хочу, чтобы было простое решение.

Вот что я для частичного зрения, что модальный заполненные при нажатии кнопки Edit Roles:

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 и все это будет обрабатываться для меня. Но, похоже, это не так. Он просто отображает текст для каждой из моих ролей.

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

ответ

7

Модель:

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> 
} 
Смежные вопросы