C# ASP.NET MVC 4内部网模板-显示用户全名
我正在VS 2012 RC下使用MVC 4的内部网模板。右上角显示域\用户名,我希望它显示全名 我能够在_Layout.cshtml中实现这一点。我在尸体中包括了以下助手-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.
@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>