我在AspNetRoles表中添加了两个角色(所有者,承包商)
在这里阅读了一些线程后,我添加了将用户添加到特定角色的代码(所有者):
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email};
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
UserManager.AddToRole(user.Id, "Owner");
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
我想要做的是在注册屏幕上添加一组未经检查的单选按钮绑定到AspNetRoles表,并根据用户选择将它们添加到该角色。
如何在注册视图中访问AspNetRoles表中的当前角色?
更新:我试图将角色添加到控制器上的viewbag:
ViewBag.RoleList = new SelectList(RoleManager.Roles, "Id", "Name")
然而我收到以下错误:
Microsoft.AspNet.Identity.RoleManager<TRole,TKey>' requires 2 type arguments
这是基于另一篇文章并标记为答案。
答案 0 :(得分:0)
控制器片段:
RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem()
{
Selected = userRoles.Contains(x.Name),
Text = x.Name,
Value = x.Name
}
在模型中:
public IEnumerable<SelectListItem> RolesList { get; set; }
在视图中:
<div class="form-group">
@Html.Label("Roles", new { @class = "control-label col-md-2" })
<span class=" col-md-10">
@foreach (var item in Model.RolesList)
{
<input type="checkbox" name="SelectedRole" value="@item.Value" checked="@item.Selected" class="checkbox-inline" />
@Html.Label(item.Value, new { @class = "control-label" })
}
</span>
</div>
在这里找到了一个很好的例子,但它有点复杂。以上总结了相关片段:RolesExample