Я пытаюсь создать сайт, на котором у пользователя будет возможность зарегистрироваться с ролью. По некоторым причинам мой выпадающий список не заполнен. У меня есть следующая ошибка. У меня есть страница входа и страница регистрации на одной странице. И я запускаю сайт, позвонив на страницу входа.
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; }
}