標準の ASP.Net メンバーシップ プロバイダーを使用して、利用可能なすべてのロールのチェックボックスのグループを取得しようとしています。ロールを単一の選択ドロップリストに正常に入れることはできますが、私の人生では、それらをチェックボックスのグループに入れることはできません。ロールを作成する方法、一般的にロールを削除する方法は既にありますが、新しいユーザー アカウントの作成時に選択する複数選択ドロップ リストまたはチェックボックスのグループを作成する方法がわかりません。注: フォームの送信時にどのチェックボックスがチェックされているかを処理する方法を尋ねているわけではありません。
いずれにせよ、これが私がこの時点で持っているものです。Models と ViewModels から始めて、次に CreatUser.cshtml に進みます。
ご覧のとおり、各アイテムのチェックボックスをレンダリングするように部分ビューのルートを取りましたが、名前、ID、すべてが空のチェックボックスのように、この時点で空になっているのは 1 つだけです。
RoleViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
namespace JustAdminIt.ViewModels
{
public class RoleViewModel
{
public string RoleName { get; set; }
public bool Selected { get; set; }
}
}
AllRolesViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
namespace JustAdminIt.ViewModels
{
public class AllRolesViewModel
{
public IEnumerable<RoleViewModel> Roles { get; set; }
}
}
AccountModel.cs - RegisterModel
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Display(Name = "Available Roles")]
public AllRolesViewModel listRoles { get; set; }
}
CreateUser.cshtml
@model JustAdminIt.Models.RegisterModel
@{
ViewBag.Title = "Register";
//var roleDrop = ViewData["roleName"];
}
<h2>Create a New Account</h2>
<p>
Use the form below to create a new account.
</p>
<p>
Passwords are required to be a minimum of @Membership.MinRequiredPasswordLength characters in length.<br /><br />
Passwords are required to contain at least @Membership.MinRequiredNonAlphanumericCharacters Non-Alpha-Numeric characters.
</p>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.")
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Email)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.ConfirmPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.ConfirmPassword)
@Html.ValidationMessageFor(m => m.ConfirmPassword)
</div>
<div class="editor-label">
Choose User Role(s)
</div>
<div class="editor-field">
@foreach(var role in Model.listRoles.Roles)
{
@Html.Label(role.RoleName)
@Html.CheckBox(role.RoleName, role.Selected)
}
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
</div>
}
明確にするために編集
管理者がアカウントの作成中に 1 つ以上のロールを割り当てることができるように、新しいユーザー アカウント作成ページ CreateUser.cshtml でチェックボックスのグループを生成する必要があるだけです。
ここには特別なものはありませんが、ロールのドロップリストを作成する例だけが見つかります。これは、このアプリケーションのオプションではありません。
Roles.getAllRoles() を使用してメンバーシップ プロバイダーを使用して列挙する方法が見つかりません。その関数は単純にロールの文字列配列を返すためです。私はそれをさまざまな方法でキャストしようとしましたが、利用可能な役割をリストするのに役に立ちませんでした。
http://msdn.microsoft.com/en-us/library/system.web.security.roles.getallroles.aspx を参照してください。すべての役割を利用可能にする別の方法を知りません。
コンテキストを明確にするために - RoleViewModel.cs と AllRolesViewModel.cs を使用して、ロール管理ページにすべてのシステム ロールを一覧表示します - パーシャルを使用すると、そこではうまく機能しますが、チェックボックス グループと html ヘルパーの性質により、別の実装が必要になります。 、そしてそれは私が理解できないものです。
更新されたコード スニペットの編集
現在リストされているコード スニペットは、現在使用されているものです。現在の主なエラーは、CreateUser.cshtml のモデル全体が null であり、理由がわからないことです。進捗はありますが、使用可能なすべてのロールに対して表示するチェックボックスのグループをまだ取得できません。