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

Dunno,如果这是在PR或Beta中发生的,但是如果我在上创建了扩展方法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重新创建页面,则效果很好。这是怎么回事?


解决方法


如果我将其包含@using SomeNamespace.Extensions在Razor视图中,则可以使用,但我宁愿将其包含在其中Web.config


jeck猫
浏览 240回答 4
4回答

holdtom

从Beta开始,Razor使用不同的配置节来全局定义名称空间导入。在Views\Web.config文件中,应添加以下内容:<configSections>&nbsp; <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">&nbsp; &nbsp; <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" />&nbsp; &nbsp; <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" />&nbsp; </sectionGroup></configSections><system.web.webPages.razor>&nbsp; <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />&nbsp; <pages pageBaseType="System.Web.Mvc.WebViewPage">&nbsp; &nbsp; <namespaces>&nbsp; &nbsp; &nbsp; <add namespace="System.Web.Mvc" />&nbsp; &nbsp; &nbsp; <add namespace="System.Web.Mvc.Ajax" />&nbsp; &nbsp; &nbsp; <add namespace="System.Web.Mvc.Html" />&nbsp; &nbsp; &nbsp; <add namespace="System.Web.Routing" />&nbsp; &nbsp; &nbsp; <!-- Your namespace here -->&nbsp; &nbsp; </namespaces>&nbsp; </pages></system.web.webPages.razor>使用MVC 3升级工具可自动确保您具有正确的配置值。请注意,您可能需要关闭并重新打开文件,以使编辑器可以获取更改。

GCT1015

我在使用Razor的MVC 4应用程序中遇到了相同的错误。为了清理web.config文件,我删除了两个webpages:配置值:<appSettings>&nbsp; <add key="webpages:Version" value="2.0.0.0" />&nbsp; <add key="webpages:Enabled" value="false" />恢复这些配置值后,页面将正确编译,有关.Partial()扩展方法的错误也消失了。

RISEBY

我在VS 2015中遇到了这个问题。以下内容为我解决了这个问题:在应用程序设置中找到“ 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" />
打开App,查看更多内容
随时随地看视频慕课网APP