Cra*_*rze 3 c# asp.net-mvc asp.net-mvc-4
我在VS 2012 RC下使用Intranet模板进行MVC 4.右上角显示domain\username,我希望它显示全名.
我能够在_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 { }
}
}
Run Code Online (Sandbox Code Playgroud)
(我还必须在参考文献中包含System.DirectoryServices.AccountManagement)
然后,我可以在问候代码中使用帮助程序,如下所示 -
<section id="login">
Hello, <span class="username">@AccountName()</span>!
</section>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我不喜欢在_Layout.cshtml中使用代码.我试图将帮助程序放在Helpers目录下的单独文件中,但@AccountName()不再解析.理想情况下,代码应该是一个直接的CS文件.
任何人都可以提出更好的方法来设置它吗?
您当然可以将代码放在常规的C#文件中,例如
AccountUtil.AccountName()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要通过放置包含助手所在的命名空间
@using My.App.Helpers @* Change to your own namespace *@
Run Code Online (Sandbox Code Playgroud)
在任何想要引用该代码的视图的顶部.
或者,您可以通过编辑web.configViews目录中的文件(而不是项目级别的文件)使该命名空间对所有视图可用.
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4438 次 |
| 最近记录: |