私のアプリケーションのロール/パーミッションコンポーネントを構築しています。マイ・ロール・ビュー・モデルは、次のようになりますDropDownListFor値の列を持つコンポジットキー
public class RoleView
{
public int Id { get; set; }
public ApplicationWithPermissionsView Application { get; set; }
public List<RolePermissionView> Permissions { get; set; }
public IEnumerable<KeyValuePair<string, int>> PermissionValues
{
get
{
return EnumHelper.ToList<PermissionValue>();
}
}
[Required]
public string Name { get; set; }
}
RolePermissionにビューモデルは次のようになります。
public class RolePermissionView
{
public int PermissionId { get; set; }
public int RoleId { get; set; }
public PermissionValue Value { get; set; }
}
PermissionValueはNOTSETは、許可、拒否のメンバーを持つ列挙型である、としてint型の値を格納しますデータベース。
ロール編集ページに移動すると、権限のリストが表示され、そのロールの権限ごとにそれぞれの値(RolePermission)が表示されます。ご覧のとおり、RolePermissionViewには複合キー(PermissionId、RoleId)があります。
可能な権限値のリストを表示し、その権限に適した権限値を選択するドロップダウンリストを作成するにはどうすればよいですか?
次はドロップダウンリストを生成しますが、値は選択しません。また、各ドロップダウンリストに一意の名前やIDを指定するわけではないので、バインディングは確実に機能しません。後でこれをエディタテンプレートに移すと、ユニークなものになると思います。
@foreach (var permission in category.Permissions)
{
<tr>
<td>@permission.Description</td>
<td>@Html.DropDownListFor(m => m.Permissions.Find(p => p.PermissionId == permission.Id).PermissionValue, new SelectList(Model.PermissionValues, "Value", "Key"))</td>
</tr>
}
返信いただきありがとうございます。私はこれに似たアプローチを検討していました。注目すべきは、category.Permissionsは単に特定のカテゴリのパーミッションのリストです。 Model.PermissionsはロールのPermissionRoles(複合キー)のリストです。だから、上記は私のためにはうまくいかないでしょう。 KeyValuePairはenumからより使いやすいリストを生成していたためです。 – getoutofmylaboratory
これでちょっと遊び、少なくとも値を表示し、一意の名前をつけ、選択した値を選択します(ただし、SelectListの3番目のパラメータ "objectSelected"を設定しなければなりませんでした)。私は今これを勝利と呼ぶでしょう。 – getoutofmylaboratory