これが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
に含める方がはるかに望ましいです
ベータ以来、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アップグレードツール を使用して、正しい設定値を自動的に確保します。
注エディターが変更を反映するには、ファイルを閉じて再度開く必要がある場合があります。
受け入れられた答えが示唆するように、設定ファイルのセクションに追加することにより、すべてのビューに「使用」を追加できます。
しかし、単一のビューでは、単に使用することができます
@using SomeNamespace.Extensions
Razorを使用するMVC 4アプリケーションでも同じエラーが発生しました。 web.configファイルをクリーンアップするために、2つのwebpages:
構成値を削除しました。
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
これらの構成値を復元すると、ページが正しくコンパイルされ、.Partial()
拡張メソッドに関するエラーがなくなりました。
私は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" />
各ビューフォルダーの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>
このエラーは、かみそりエンジンがプロジェクトに適切に関連付けられていないことを示しています。
解決策:[ソリューションエクスプローラー]ウィンドウで、Webプロジェクトを右クリックし、[Nugetパッケージの管理...]を選択して、[Microsoft ASP.NET Razor]をインストールします。これにより、適切なパッケージがインストールされ、web.configファイルに必要なエントリが追加されます。
私の場合はVS 2013を使用し、MVC 3をネイティブにサポートしていません(あなたも./Views/web.configを変更します): https://stackoverflow.com/a/28155567/1536197