ASP.NET MVC显示用户全名

时间:2017-03-02 15:47:30

标签: c# asp.net-mvc asp.net-identity

我想显示ApplicationUser类中存在的DisplayName列中的值,而不是使用用户名。

基于此处的solution,我创建了一个自定义类并在Global.asax Application Start中初始化它。

public class UserProfileActionFilter: ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
        if (user != null)
        {
            filterContext.Controller.ViewBag.DisplayName = user.DisplayName;
        }

    }

}

然后我在LogOnPartialView中引用了以下ViewBag.DisplayName。

但是这个类在应用程序,登录,动作执行等过程中被多次击中。我担心这是否会导致数据库开销。

1 个答案:

答案 0 :(得分:2)

我会创建一个$userModel = $container['UserModel']; $user = $userModel->getSingleUser('name', 'jmattheis'); 扩展方法:

IIdentity

然后你应该能够像这样使用它:

public static class IIdentityExtensions 
{   
    public static string GetUserDisplayName(this IIdentity identity)
    {
       ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
       if (user != null)
       {
           return user.DisplayName;
       }
       return string.Empty;
    }
}

我还没有对它进行过测试,但它应该指向正确的方向。