Razor HtmlHelper扩展(或其他视图命名空间)未find

不知道,如果这是发生在公关或testing版,但如果我在HtmlHelper创build一个扩展方法,它不会在剃刀供电页面识别:

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

我将它添加到Web.config<Namespaces>部分:

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

但是当试图查看页面时会引发编译错误:

 @Html.Foo() 

如果我用WebForms重新创build页面,它工作正常。 这是怎么回事?

解决方法

如果我在我的Razor视图中包含@using SomeNamespace.Extensions ,那么它可以工作,但是我宁愿将它放在Web.config

自Beta版以来,Razor使用不同的configuration部分来全局定义名称空间导入。 在您的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升级工具自动确保您有正确的configuration值。

请注意 ,您可能需要closures并重新打开文件,才能使编辑器find所做的更改。

正如接受的答案build议您可以添加“使用”到所有视图,通过添加到configuration文件的部分。

但是对于一个单一的看法,你可以使用

@使用SomeNamespace.Extensions

我在使用Razor的MVC 4应用程序中遇到了同样的错误。 在尝试清理web.config文件时,我删除了两个webpages:configuration值:

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

一旦我恢复这些configuration值,页面将正确编译,有关.Partial()扩展方法的错误消失。

我在VS 2015有这个问题。下面解决它对我来说:

在Appsettings中find“网页:版本”,并将其更新到版本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> 

这个错误告诉你,你没有与你的项目正确关联的razor引擎。

解决scheme:在解决scheme资源pipe理器窗口中,右键单击您的Web项目并select“pipe理Nuget包…”,然后安装“Microsoft ASP.NET Razor”。 这将确保安装正确的软件包,它会将必要的条目添加到您的web.config文件中。

在我的情况下使用VS 2013,它本身不支持MVC 3(即使你更改./Views/web.config):https://stackoverflow.com/a/28155567/1536197

由于ASP.NET MVC 3 RTM不存在,因此Razor不需要configuration部分。 而这些部分可以安全地删除。