如何在ASP.NET MVC 5应用程序中显示全名?

时间:2016-09-09 12:06:18

标签: c# asp.net asp.net-mvc

我是MS网络应用的新手......

Visual Studio 2015 - ASP.NET MVC 5.2.3

我在网上找到了许多适用于较旧的MVC应用程序的解决方案,但我无法工作。特别是这一个: How do I get the full name of a user in .net MVC 3 intranet app? 该解决方案应该在MVC 5中运行吗?

我添加了对System.DirectoryServices.AccountManagement的引用,并将本地副本设置为true。

我在HomeController中有这个:

    public string firstName;
    public string lastName;

    public ActionResult Index()
    {
        using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MFAD"))
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
            firstName = user.GivenName;
            lastName = user.Surname;
        }

        return View();
    }

如何添加助手? 我希望所有页面都显示该名称,我是否在__Layout.cshtml中实现了这个?

2 个答案:

答案 0 :(得分:1)

好吧,如果你想在你的所有页面上显示名称,我认为在你的所有页面上进行数据库调用(这是剃须刀助手所做的)是一个相当糟糕的主意。

而且我也不喜欢剃须助手来做db调用......

您应该在成功登录后执行此查询(我猜您有登录和注销操作),并将该值存储在会话中。

类似的东西。

public ActionResult Login(...) {
    //check if the login is correct, if yes
   using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MFAD"))
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
            firstName = user.GivenName;
            lastName = user.Surname;
            HttpContext.Current.Session["currentUser"] = firstName + " " + lastName;
        }

您可以在_Layout.cshtml中使用HttpContext.Current.Session["currentUser"],并进行一些空检查。

当然,在你的LogOut方法中,你也应该做一个 HttpContext.Current.Session["currentUser"] = null;

答案 1 :(得分:0)

将对System.DirectoryServices.AccountManagement的引用添加到您的项目中并像这样执行...

    using System.DirectoryServices.AccountManagement;

    public ActionResult Index()
    {
        UserPrincipal userPrincipal = UserPrincipal.Current;
        var name = userPrincipal.GivenName + " " + userPrincipal.Surname;

        return View();
    }