在分部视图中获取当前应用程序用户



新的 MVC 5 项目有显示当前用户名的_LoginPartial:

@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", 
                 "Manage", 
                 "Account", 
                 routeValues: null, 
                 htmlAttributes: new { title = "Manage" })

我已将姓/名字段添加到 ApplicationUser 类,但找不到显示它们而不是用户名的方法。有没有办法访问应用程序用户对象?我已经尝试了直接的转换(ApplicationUser)User但它会产生错误的转换异常。

  1. 在 MVC5 中,Controller.UserView.User 中,返回GenericPrincipal实例:

    GenericPrincipal user = (GenericPrincipal) User;
    
  2. User.Identity.Name有用户名,您可以使用它来检索ApplicationUser

  3. C#具有很好的扩展方法功能。探索和试验它。

使用下面的示例,涵盖对当前问题的一些理解。

public static class GenericPrincipalExtensions
{
    public static ApplicationUser ApplicationUser(this IPrincipal user)
    {
        GenericPrincipal userPrincipal = (GenericPrincipal)user;
        UserManager<ApplicationUser> userManager = new UserManager<Models.ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
        if (userPrincipal.Identity.IsAuthenticated)
        {
            return userManager.FindById(userPrincipal.Identity.GetUserId());
        }
        else
        {
            return null;
        }
    }
}

我做到了!

使用此链接中的帮助:http://forums.asp.net/t/1994249.aspx?How+to+who+in+my+_LoginPartial+cshtml+all+the+rest+of+the+information+of+the+user

我是这样做的:

在 AcountController 中,添加一个操作以获取所需的属性:

 [ChildActionOnly]
    public string GetCurrentUserName()
    {
        var user = UserManager.FindByEmail(User.Identity.GetUserName());
        if (user != null)
        {
            return user.Name;
        }
        else
        {
            return "";
        }
    }

在_LoginPartialView中,将原始行更改为:

@Html.ActionLink("Hello " + @Html.Raw(Html.Action("GetCurrentUserName", "Account")) + "!", "Index", "Manage", routeValues: new { area = "" }, htmlAttributes: new { title = "Manage" })

相关内容

  • 没有找到相关文章

最新更新