2012-01-25 19 views
3

MVC3アプリケーションでロールを管理しようとしています。アイデアは私がユーザーのリストを持っていることです。行のEdit Rolesボタンをクリックすると、ユーザーがチェックされているものとすべての可能なロールのリストを持つモーダルウィンドウが表示されます。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のためだった、それはすべて私のために処理されるだろう期待していました。しかし、それはそうではないようです。私の役割ごとにテキストを偽にするだけです。

このチェックボックスのリストを生成し、ユーザー名とともにチェックされたwhatsをサーバーに送信する最も良い方法は何ですか?

答えて

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> 
} 
関連する問題