web-dev-qa-db-ja.com

Razor HtmlHelper Extensions(またはビューの他の名前空間)が見つかりません

これがPRまたはベータ版で発生した場合はDunnoですが、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でページを再作成すると、正常に機能します。どうしたんだ?

回避策

Razorビューに@using SomeNamespace.Extensionsを含めると機能しますが、Web.configに含める方がはるかに望ましいです

166
swilliams

ベータ以来、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アップグレードツール を使用して、正しい設定値を自動的に確保します。

エディターが変更を反映するには、ファイルを閉じて再度開く必要がある場合があります。

273
marcind

受け入れられた答えが示唆するように、設定ファイルのセクションに追加することにより、すべてのビューに「使用」を追加できます。

しかし、単一のビューでは、単に使用することができます

@using SomeNamespace.Extensions

11
Paul Rowland

Razorを使用するMVC 4アプリケーションでも同じエラーが発生しました。 web.configファイルをクリーンアップするために、2つのwebpages:構成値を削除しました。

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />

これらの構成値を復元すると、ページが正しくコンパイルされ、.Partial()拡張メソッドに関するエラーがなくなりました。

6
John Rasch

私はVS 2015でこの問題を抱えていました。以下は私のためにそれを解決しました:

Appsettingsで「webpages:Version」を見つけて、バージョン3.0.0.0に更新します。私のweb.configには

<add key="webpages:Version" value="2.0.0.0" />

に更新しました

<add key="webpages:Version" value="3.0.0.0" />
5
Damian Green

各ビューフォルダーのweb.configにこのセクションを追加することで解決したことがわかりました。

<runtime>
        <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="4.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
3
Joseph Morgan

このエラーは、かみそりエンジンがプロジェクトに適切に関連付けられていないことを示しています。

解決策:[ソリューションエクスプローラー]ウィンドウで、Webプロジェクトを右クリックし、[Nugetパッケージの管理...]を選択して、[Microsoft ASP.NET Razor]をインストールします。これにより、適切なパッケージがインストールされ、web.configファイルに必要なエントリが追加されます。

1
user3459730

私の場合はVS 2013を使用し、MVC 3をネイティブにサポートしていません(あなたも./Views/web.configを変更します): https://stackoverflow.com/a/28155567/1536197

0