1. ホーム
  2. asp.net-mvc-3

[解決済み] Razor HtmlHelper Extensions (またはビューの他の名前空間) が見つかりません。

2022-04-24 18:49:02

質問

PRかベータ版で起きていたことなのか分かりませんが、拡張メソッドを HtmlHelper Razor を使用したページでは認識されません。

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}

に追加しました。 <Namespaces> セクションで Web.config :

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>

しかし、ページを表示しようとすると、コンパイルエラーが投げられます。

@Html.Foo()

でページを作り直すと WebForms は正常に動作しています。どうしたんでしょうか?

回避策

もし私が @using SomeNamespace.Extensions を Razor のビューに入れるとうまくいくのですが、それよりもむしろ Web.config

解決方法は?

ベータ版以降、Razor はネームスペースのインポートをグローバルに定義するために、異なる設定セクションを使用しています。あなたの Views\Web.config ファイルに以下を追加してください。

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
      <!-- Your namespace here -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

を使用します。 MVC 3 アップグレードツール を使用すると、自動的に正しい設定値を持つようになります。

備考 エディタに変更を反映させるために、ファイルを一度閉じてから再度開く必要がある場合があることをお知らせします。