我怀疑。我在VS2013中使用Asp.net mvc5。当用户登录时,可以使用
标识登录用户的用户名 User.Identity.GetUserId
但我无法在视图页面中识别用户的角色。
我尝试了以下内容:
@{
var store = new Microsoft.AspNet.Identity.EntityFramework.UserStore<RaspberryPi.Models.ApplicationUser>(new RaspberryPi.Models.ApplicationDbContext());
var manager = new Microsoft.AspNet.Identity.UserManager<RaspberryPi.Models.ApplicationUser>(store);
var l = manager.IsInRole(User.Identity.GetUserId, "Moderator");
}
但导致错误。
CS1928: 'Microsoft.AspNet.Identity.UserManager<RaspberryPi.Models.ApplicationUser>' does not contain a definition for 'IsInRole' and the best extension method overload 'Microsoft.AspNet.Identity.UserManagerExtensions.IsInRole<TUser>(Microsoft.AspNet.Identity.UserManager<TUser>, string, string)' has some invalid arguments
我该怎么做?
请帮忙, 感谢
答案 0 :(得分:1)
您的ApplicationUser是否派生自IdentityUser?
public class ApplicationUser : IdentityUser
这应该适用于cshtml
@{
var context = new RaspberryPi.Models.ApplicationDbContext();
if (context.Users.Any(u => u.UserName == User.Identity.Name))
{
var store = new Microsoft.AspNet.Identity.EntityFramework.UserStore<applicationuser>();
var manager = new Microsoft.AspNet.Identity.UserManager<applicationuser>(store);
ApplicationUser user = manager.FindByName<applicationuser>(User.Identity.Name);
if (manager.IsInRole(user.Id, "Moderator") == true)
{
// Do whatever you want...
}
}
或者,如果您想以简单的方式做到这一点。
@if (User.IsInRole("Moderator")){
}
答案 1 :(得分:1)
该异常非常自我解释,您提供的参数不会与IsInRole扩展方法相关联。
问题(假设您的代码完全正如您所示)是GetUserId
是函数,而不是属性,因此您需要实际叫它
manager.IsInRole(User.Identity.GetUserId(), "Moderator");