DropdownListДля пользователя Роли не заполняются - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь создать сайт, на котором у пользователя будет возможность зарегистрироваться с ролью. По некоторым причинам мой выпадающий список не заполнен. У меня есть следующая ошибка. У меня есть страница входа и страница регистрации на одной странице. И я запускаю сайт, позвонив на страницу входа.

System.InvalidOperationException: «Нет элемента ViewData типа« IEnumerable », который имеет ключ« Роль ».

Может кто-нибудь дать мне понять, почему это так? происходит? Вот мой код

Просмотр страницы:

<div class="form-group mb-0">
                    @Html.Label("Role", new { @class = "col-sm-6 control-label" })
                    <div class="col-md-10">
                        @Html.DropDownListFor(model => model.Role, ViewBag.RoleList as List<SelectListItem>)
                    </div>
                </div>

Контроллер:

 // GET: /Account/Login
        [AllowAnonymous]
        public ActionResult Login( string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            ViewBag.RoleList = new SelectList(context.Roles.ToList(), "Id", "Name");
            return View();               
        }

        //
        // POST: /Account/Login
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {

            if (!ModelState.IsValid)
            {
                return View(model);
            }

            // This doesn't count login failures towards account lockout   
            // To enable password failures to trigger account lockout, change to shouldLockout: true   
            ViewBag.RoleList = new SelectList(context.Roles.ToList(), "Id", "Name");
            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
            switch (result)
            {

                //After he signs in check his role and you will redirect him to the correct page
                //User.IsInRole use this(returns true or false)
                case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("", "Invalid login attempt.");
                    return View(model);
            }

        }

Модель:

 public class LoginViewModel
    {
        [Required(ErrorMessage = "Please select a role")]

        public IdentityRole Role { get; set; }
        public IEnumerable<SelectListItem> RoleList { get; set; }
    }

    public class RegisterViewModel
    {

        [Required(ErrorMessage = "Please select a role")]

        public IdentityRole Role { get; set; }
        public IEnumerable<SelectListItem> RoleList { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...