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部分。 而这些部分可以安全地删除。