Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 4内部网模板-显示用户全名_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC 4内部网模板-显示用户全名

C# ASP.NET MVC 4内部网模板-显示用户全名,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在VS 2012 RC下使用MVC 4的内部网模板。右上角显示域\用户名,我希望它显示全名 我能够在_Layout.cshtml中实现这一点。我在尸体中包括了以下助手- @helper AccountName() { using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.

我正在VS 2012 RC下使用MVC 4的内部网模板。右上角显示域\用户名,我希望它显示全名

我能够在_Layout.cshtml中实现这一点。我在尸体中包括了以下助手-

@helper AccountName()
{       
    using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain))
    {
        try
        {
            var principal = System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(context, User.Identity.Name); 
            @String.Concat(principal.GivenName, " ", principal.Surname) 
        }
        catch { }

    } 
}
(我还必须在参考资料中包括System.DirectoryServices.AccountManagement)

然后,我可以在问候语代码中使用助手,如下所示-

 <section id="login">
      Hello, <span class="username">@AccountName()</span>!
 </section>

您好,@AccountName()!
这工作正常,但我不喜欢将代码放在_Layout.cshtml中。我试图将helper放在Helpers目录下的单独文件中,但是@AccountName()不再解析。理想情况下,代码应该真正位于一个直接的CS文件中


有谁能建议一种更好的设置方法吗?

你当然可以将代码放在一个常规的C文件中,例如

AccountUtil.AccountName()
在这种情况下,您需要通过放置

@using My.App.Helpers  @* Change to your own namespace *@
在任何要引用该代码的视图的顶部

或者,您可以通过编辑views目录中的
web.config
文件(而不是项目级别的文件),使该名称空间对所有视图可用



还有一个问题-我显然只想搜索Active Directory一次,所以我在助手类中设置了一个静态变量来包含该值。在ASP.NETMVC中有没有一个“最佳实践”来做这类事情?这对我不适用。我把那个助手放在我的_布局的顶部,它表示名称空间DirectoryServices的目录不可用。。我在应用程序“引用”中添加了它。。。我错过了什么?
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <!-- Don't edit out the stuff that's already here! -->
        <add namespace="My.App.Helpers" />  <!-- Add your own namespace here -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>