我想显示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。
但是这个类在应用程序,登录,动作执行等过程中被多次击中。我担心这是否会导致数据库开销。
答案 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;
}
}
我还没有对它进行过测试,但它应该指向正确的方向。