新的 MVC 5 项目有显示当前用户名的_LoginPartial:
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!",
"Manage",
"Account",
routeValues: null,
htmlAttributes: new { title = "Manage" })
我已将姓/名字段添加到 ApplicationUser 类,但找不到显示它们而不是用户名的方法。有没有办法访问应用程序用户对象?我已经尝试了直接的转换(ApplicationUser)User
但它会产生错误的转换异常。
-
在 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;
}
}
}
我做到了!
使用此链接中的帮助: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" })