簡體   English   中英

如何在Razor視圖中獲取Role.Name?

[英]How to get Role.Name in Razor View?

我正在使用@model IEnumerable<WebApplication.Models.ApplicationUser>

視圖

@foreach (var user in Model)
{
    <tr>
        <td>
            @foreach(var role in user.Roles){
                role.Name; //invalid
                role.RoleId; //valid
                role.UserId; //valid
            }
        </td>
    </tr>
}

模型

public class ApplicationUser : IdentityUser
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

我可以從該角色獲取RoleID和UserId,但是如何獲取Role.Name?

IdentityUser [來自元數據]

namespace Microsoft.AspNet.Identity.EntityFramework
{
    // Summary:
    //     Default EntityFramework IUser implementation
    //
    // Type parameters:
    //   TKey:
    //
    //   TLogin:
    //
    //   TRole:
    //
    //   TClaim:
    public class IdentityUser<TKey, TLogin, TRole, TClaim> : IUser<TKey>
        where TLogin : global::Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin<TKey>
        where TRole : global::Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole<TKey>
        where TClaim : global::Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim<TKey>
    {
        // Summary:
        //     Constructor
        public IdentityUser();

        // Summary:
        //     Used to record failures for the purposes of lockout
        public virtual int AccessFailedCount { get; set; }
        //
        // Summary:
        //     Navigation property for user claims
        public virtual ICollection<TClaim> Claims { get; }
        //
        // Summary:
        //     Email
        public virtual string Email { get; set; }
        //
        // Summary:
        //     True if the email is confirmed, default is false
        public virtual bool EmailConfirmed { get; set; }
        //
        // Summary:
        //     User ID (Primary Key)
        public virtual TKey Id { get; set; }
        //
        // Summary:
        //     Is lockout enabled for this user
        public virtual bool LockoutEnabled { get; set; }
        //
        // Summary:
        //     DateTime in UTC when lockout ends, any time in the past is considered not
        //     locked out.
        public virtual DateTime? LockoutEndDateUtc { get; set; }
        //
        // Summary:
        //     Navigation property for user logins
        public virtual ICollection<TLogin> Logins { get; }
        //
        // Summary:
        //     The salted/hashed form of the user password
        public virtual string PasswordHash { get; set; }
        //
        // Summary:
        //     PhoneNumber for the user
        public virtual string PhoneNumber { get; set; }
        //
        // Summary:
        //     True if the phone number is confirmed, default is false
        public virtual bool PhoneNumberConfirmed { get; set; }
        //
        // Summary:
        //     Navigation property for user roles
        public virtual ICollection<TRole> Roles { get; }
        //
        // Summary:
        //     A random value that should change whenever a users credentials have changed
        //     (password changed, login removed)
        public virtual string SecurityStamp { get; set; }
        //
        // Summary:
        //     Is two factor enabled for the user
        public virtual bool TwoFactorEnabled { get; set; }
        //
        // Summary:
        //     User name
        public virtual string UserName { get; set; }
    }
}

我可以在剃刀布局視圖中找到該角色的唯一方法是從Request中獲取UserManager

剃刀視圖:

@using Microsoft.AspNet.Identity
@using Microsoft.AspNet.Identity.Owin;

@if (Request.IsAuthenticated) {
  var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
  var userRoles = userManager.GetRoles(User.Identity.GetUserId());
  var role = userRoles[0];
}

如果角色類型是Microsoft.AspNet.Identity.EntityFramework IdentityUserRole ,則您將無權訪問角色名稱。 您可以從IdentityUserRole<TKey>實現自己的角色,並設置角色名稱或通過查詢EF存儲庫直接加載角色。

作為Charlie答案的擴展,一種實現方法是獲取Roles集合並將其傳遞到視圖模型中。

@foreach (var user in Model)
{
    <tr>
        <td>
            @foreach(var role in user.Roles){
                Model.Roles.First(x=>x.RoleID == role.RoleID).Name;
                role.RoleId; //valid
                role.UserId; //valid
            }
        </td>
    </tr>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM