3

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

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

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

4

2 回答 2

4
  1. 在 MVC5Controller.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;
        }
    }
}
于 2013-11-15T06:24:02.953 回答
2

我做的!

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

我是这样做的:

在 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" })
于 2015-01-02T00:04:51.507 回答