0

「管理者」ロールのユーザーのみが新しいユーザーを作成できる登録ビューがあります。標準の VS2012 登録ビューを使用していますが、ドロップダウンを追加して、管理者が新しいユーザーが属するロールを選択できるようにしたいと考えています。

コントローラー Register(RegisterModel モデル) を使用してフォームがポストバックされると、選択したロールでドロップダウン リストを取得し、ここに入力する方法は次のとおりです。

Roles.AddUserToRole(model.UserName, XXXXXXXXXX);

意見:

 <fieldset>
    <legend>Registration Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
        </li>
        <li>
            @Html.LabelFor(m => m.Email)
            @Html.TextBoxFor(m => m.Email)
        </li>
        <li>
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password)
        </li>
        <li>
            @Html.LabelFor(m => m.ConfirmPassword)
            @Html.PasswordFor(m => m.ConfirmPassword)
        </li>
        <li>
            Type of user:
            @Html.DropDownList("roleName")
        </li>

    </ol>
    <input type="submit" value="Register" />
</fieldset>

コントローラ:

 //
    // POST: /Account/Register

    [Authorize(Roles = "admin")]
    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                // Add user to selected role
                Roles.AddUserToRole(model.UserName, XXXXXXXXXX);
                // Don't want to login the user - as "admin" is creating this user
                // FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
                //ViewBag.created = "yes";
                return RedirectToAction("UserList","Account");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

ありがとうございました、

マーク

4

2 に答える 2

3

欲求不満になり、休憩に行き、戻ってきました:

Roles.AddUserToRole(model.UserName, Request.Form["roleName"]);

質問への回答 - ちょっと休憩!!!

ありがとう、マーク

于 2012-09-28T13:51:42.463 に答える
1
    <li>
        Type of user:
        @Html.DropDownListFor( x => x.roleName, new { List = new LookupUtils.AvailableRolesList(Model.UserId), "Value", "Text", Model.roleName })
    </li>

LookupUtils は次の静的クラスです。

    public static List<SelectListItem> AvailableRolesList( int UserId )
    {
        var dataContext = new YourDataContext(  );
        var data = dataContext.GetRolesForUserFn( UserId ).ToList();

        var result = ( from res in data
                       select new SelectListItem()
                                  {
                                      Text = res.RoleName,
                                      Value = res.RoleId.ToString()
                                  } ).ToList();

        return result;
    }
于 2012-09-28T13:55:27.110 に答える