未找到 Razor HtmlHelper 扩展(或视图的其他名称空间)

我不知道这是发生在公关或测试版,但如果我创建一个扩展方法的 HtmlHelper,它是不能识别在一个剃刀驱动的页面:

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()

如果我用 网上表格重新创建页面,它工作得很好。这是怎么回事?

解决办法

如果我将 @using SomeNamespace.Extensions包含在我的 Razor 视图中,那么它就可以工作,但是我更希望它只出现在 Web.config

124053 次浏览

自 Beta 以来,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升级工具自动确保具有正确的配置值。

注意 ,您可能需要关闭并重新打开该文件,以便编辑器选择更改。

由于 ASP.NET MVC 3 RTM 已经发布,因此不需要 Razor 的配置部分。这些部分可以安全地移除。

正如已被接受的答案所表明的那样,您可以通过添加到配置文件的某个部分来为所有视图添加“ using”。

但是对于单个视图,您可以只使用

@ using Some Namespace

我发现把每个视图文件夹的这个部分放到 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 的 MVC 4应用程序中也有同样的错误。为了清理 web.config 文件,我删除了两个 webpages:配置值:

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

一旦我恢复了这些配置值,页面就会正确编译,关于 .Partial()扩展方法的错误就会消失。

在我的案例中使用 VS 2013,它本身不支持 MVC 3(即使你改变了./Views/web.config) : https://stackoverflow.com/a/28155567/1536197

我在 VS 2015里有这个问题。 下面的内容帮我解决了这个问题:

在应用程序设置中查找“ webpages: Version”并将其更新到3.0.0.0版

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

我把它更新到

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

这个错误告诉你,你没有剃须刀引擎适当地关联到你的项目。

解决方案: 在解决方案资源管理器窗口中,右击你的 web 项目,选择“ Manage Nuget Packages...”,然后安装“ Microsoft ASP.NET Razor”。这将确保安装了正确的包,并将必要的条目添加到 web.config 文件中。