3

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>

これは問題なく動作しますが、_Layout.cshtml にコードを含めるのは好きではありません。Helpers ディレクトリの下の別のファイルにヘルパーを配置しようとしましたが、 @AccountName() は解決されなくなりました。理想的には、コードはストレート CS ファイルにある必要があります。

誰かがこれを設定するためのより良い方法を提案できますか?

4

1 に答える 1

6

コードを通常の C# ファイルに入れることもできます。たとえば、

AccountUtil.AccountName()

その場合、ヘルパーがいる名前空間を含める必要があります。

@using My.App.Helpers  @* Change to your own namespace *@

そのコードを参照したいビューの上部にあります。

または、(プロジェクト レベルのディレクトリではなくweb.config) Views ディレクトリ内のファイルを編集して、その名前空間をすべてのビューで使用できるようにすることもできます。

  <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>
于 2012-06-08T02:09:31.503 に答える