为什么角色显示为 "not exist" 即使存在于数据库中 (asp.net mvc)
Why does a role shows as "not exist" even when present in the database (asp.net mvc)
我在注册用户时尝试将用户添加到角色,所以我在 migrations.cs class
中使用下面的代码为角色播种并更新了数据库
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
string[] roleNames = { "Admin", "Reviewer", "User" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
if (!RoleManager.RoleExists(roleName))
{
roleResult = RoleManager.Create(new IdentityRole(roleName));
}
}
我试图将角色名称提取到我的帐户控制器中的下拉列表中 class
public ActionResult Register()
{
var model = new RegisterViewModel();
model.RolesList = new SelectList(_db.Roles, "Id", "Name");
return View(model);
}
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser()
{
UserName = model.UserName,
PortalUser = new PortalUser()
{
Email = model.Email,
UserName = model.UserName
}
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
UserManager.AddToRole(user.Id, model.Roleid);
return RedirectToAction("Index", "ApplicationReview");
}
else
{
AddErrors(result);
}
}
model.RolesList = new SelectList(_db.Roles, "Id", "Name");
// If we got this far, something failed, redisplay form
return View(model);
}
然而调试器此时显示错误
UserManager.AddToRole(user.Id, model.Roleid);
Role bec759ac-55ca-40f0-a8b8-00de314dd2b3 does not exist.
但是这个角色存在于数据库中,所以我对问题出在哪里感到困惑
第二个参数是字符串角色,如"Reviewer"
不是角色的id。它出错了,因为实际上没有 Name
等于该 GUID 的角色。
参见:https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx
我在注册用户时尝试将用户添加到角色,所以我在 migrations.cs class
中使用下面的代码为角色播种并更新了数据库 var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
string[] roleNames = { "Admin", "Reviewer", "User" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
if (!RoleManager.RoleExists(roleName))
{
roleResult = RoleManager.Create(new IdentityRole(roleName));
}
}
我试图将角色名称提取到我的帐户控制器中的下拉列表中 class
public ActionResult Register()
{
var model = new RegisterViewModel();
model.RolesList = new SelectList(_db.Roles, "Id", "Name");
return View(model);
}
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser()
{
UserName = model.UserName,
PortalUser = new PortalUser()
{
Email = model.Email,
UserName = model.UserName
}
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
UserManager.AddToRole(user.Id, model.Roleid);
return RedirectToAction("Index", "ApplicationReview");
}
else
{
AddErrors(result);
}
}
model.RolesList = new SelectList(_db.Roles, "Id", "Name");
// If we got this far, something failed, redisplay form
return View(model);
}
然而调试器此时显示错误
UserManager.AddToRole(user.Id, model.Roleid); Role bec759ac-55ca-40f0-a8b8-00de314dd2b3 does not exist.
但是这个角色存在于数据库中,所以我对问题出在哪里感到困惑
第二个参数是字符串角色,如"Reviewer"
不是角色的id。它出错了,因为实际上没有 Name
等于该 GUID 的角色。
参见:https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx