MVC 将用户角色返回到视图
MVC returning user roles to a view
我已使用以下教程 http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc 向我的应用程序添加角色。我已经设法为存储在我的数据库中的用户添加了一个角色。但是我无法列出已分配给该用户的角色。我收到以下错误
对象引用未设置为对象的实例。
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
我的控制器是这样的
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetRoles(string UserName)
{
ApplicationDbContext context = new ApplicationDbContext();
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account = new AccountController();
//this.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id);
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
和我的观点
<hr />
<h3>Get Roles for a User</h3>
@using (Html.BeginForm("GetRoles", "Account"))
{
@Html.AntiForgeryToken()
<p>
Username : @Html.TextBox("UserName")
<input type="submit" value="Get Roles for this User" />
</p>
}
@if (ViewBag.RolesForThisUser != null)
{
<div style="background-color:yellow;">
<h3>Roles for this user </h3>
<ol>
@foreach (string s in ViewBag.RolesForThisUser)
{
<li>@s</li>
}
</ol>
</div>
}
我认为你选择了一个糟糕的教程,如果你阅读了post末尾的评论,那么所有人都有类似的问题。顺便说一句,这篇文章很混乱。多次创建 AccountController 的实例以访问在该控制器 (UserManager) 上创建的对象的实例,永远将此实现直接绑定到默认 AccountController 的存在。
我留下几个好的教程
ASP.NET MVC 5 Identity: Extending and Modifying Roles
Extending Identity Accounts and Implementing Role-Based Authentication in ASP.NET MVC 5
这听起来很熟悉,前几天我注意到了这个问题。我不会将其标记为完全重复的,因为我不完全确定它是..但是你和这个人很可能正在学习相同的教程。
编辑:经过进一步审查,它看起来像是完全相同的问题..所以我继续将其投票为重复。
你可以试试这个:
在您的控制器 class 中,插入:
using System.Threading.Tasks;
using Microsoft.AspNet.Identity.Owin;
接下来,控制器动作:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> GetRoles(string UserName)
{
using (ApplicationDbContext context = new ApplicationDbContext())
{
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
//var account = new AccountController();
ApplicationUserManager UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
//this.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = await UserManager.GetRolesAsync(user.Id);
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
}
景色还行。如果对您有用,请告诉我。
感谢大家的回复。我已经通过使用以下内容设法 return 用户角色。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetRoles(string UserName)
{
ApplicationDbContext context = new ApplicationDbContext();
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var ReturnRole = this.UserManager.GetRoles(user.Id);
// ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = ReturnRole;
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
以上来自 Stefan Vlad 的 Post 也可以使用 :) 谢谢 Stefan
我现在只需要删除一个用户的角色,希望如此!
我已使用以下教程 http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc 向我的应用程序添加角色。我已经设法为存储在我的数据库中的用户添加了一个角色。但是我无法列出已分配给该用户的角色。我收到以下错误
对象引用未设置为对象的实例。
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
我的控制器是这样的
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetRoles(string UserName)
{
ApplicationDbContext context = new ApplicationDbContext();
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account = new AccountController();
//this.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id);
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
和我的观点
<hr />
<h3>Get Roles for a User</h3>
@using (Html.BeginForm("GetRoles", "Account"))
{
@Html.AntiForgeryToken()
<p>
Username : @Html.TextBox("UserName")
<input type="submit" value="Get Roles for this User" />
</p>
}
@if (ViewBag.RolesForThisUser != null)
{
<div style="background-color:yellow;">
<h3>Roles for this user </h3>
<ol>
@foreach (string s in ViewBag.RolesForThisUser)
{
<li>@s</li>
}
</ol>
</div>
}
我认为你选择了一个糟糕的教程,如果你阅读了post末尾的评论,那么所有人都有类似的问题。顺便说一句,这篇文章很混乱。多次创建 AccountController 的实例以访问在该控制器 (UserManager) 上创建的对象的实例,永远将此实现直接绑定到默认 AccountController 的存在。
我留下几个好的教程
ASP.NET MVC 5 Identity: Extending and Modifying Roles
Extending Identity Accounts and Implementing Role-Based Authentication in ASP.NET MVC 5
这听起来很熟悉,前几天我注意到了这个问题。我不会将其标记为完全重复的,因为我不完全确定它是..但是你和这个人很可能正在学习相同的教程。
编辑:经过进一步审查,它看起来像是完全相同的问题..所以我继续将其投票为重复。
你可以试试这个: 在您的控制器 class 中,插入:
using System.Threading.Tasks;
using Microsoft.AspNet.Identity.Owin;
接下来,控制器动作:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> GetRoles(string UserName)
{
using (ApplicationDbContext context = new ApplicationDbContext())
{
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
//var account = new AccountController();
ApplicationUserManager UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
//this.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = await UserManager.GetRolesAsync(user.Id);
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
}
景色还行。如果对您有用,请告诉我。
感谢大家的回复。我已经通过使用以下内容设法 return 用户角色。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetRoles(string UserName)
{
ApplicationDbContext context = new ApplicationDbContext();
if (!string.IsNullOrWhiteSpace(UserName))
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var ReturnRole = this.UserManager.GetRoles(user.Id);
// ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id);
ViewBag.RolesForThisUser = ReturnRole;
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
}
return View("ManageUserRoles");
}
以上来自 Stefan Vlad 的 Post 也可以使用 :) 谢谢 Stefan
我现在只需要删除一个用户的角色,希望如此!