0

私は、ユーザーが asp.net mvc Web アプリケーションに登録するときに自分の役割を選択できるようにしたいと考えています。以前、asp.net 管理ツールを使用してロールを追加しました。登録メソッドで使用しているコードは次のとおりです

public ActionResult Register()  
{
ViewData["roleName"] = new SelectList(Roles.GetAllRoles(), "roleName");
return View();
}


 [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                Roles.AddUserToRole(model.UserName, "roleName");
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

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

登録ビューにいる間に、このコードを取得しました

    <label for="roleName">Select Role:</label>
         @Html.DropDownList("roleName")
         @Html.ValidationMessage("roleName")

ただし、ロールはデータベースとユーザーに書き込まれます。ただし、UsersInRoles テーブルは空で、この例外が発生しました

System.Configuration.Provider.ProviderException: ロール 'roleName' が見つかりませんでした。

誰かが同じ問題を抱えていましたか?

4

1 に答える 1

0

ユーザー roleName によって選択されるように、roleName パラメーターを Register コントローラー アクションに追加するか、FormCollection から roleName を取得する必要があります。以下に例を示します。 Register post アクションを次のように変更します。

        [HttpPost]
        public ActionResult Register(RegisterModel model, String roleName)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    Roles.AddUserToRole(model.UserName, roleName);
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
于 2012-10-29T10:49:25.083 に答える