新的MVC 5项目有_LoginPartial,显示当前用户名:
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!",
"Manage",
"Account",
routeValues: null,
htmlAttributes: new { title = "Manage" })
我已将最后/名字段添加到ApplicationUser类,但无法找到显示它们的方法而不是UserName。有没有办法访问ApplicationUser对象?我尝试过简单的转换(ApplicationUser)User
,但它会产生错误的强制转换异常。
答案 0 :(得分:4)
在MVC5中,Controller.User
和View.User
,返回GenericPrincipal
个实例:
GenericPrincipal user = (GenericPrincipal) User;
User.Identity.Name
有用户名,您可以使用它来检索ApplicationUser
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;
}
}
}
答案 1 :(得分:2)
我做到了!
我这样做了:
在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" })