代码之家  ›  专栏  ›  技术社区  ›  swilliams

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

  •  164
  • swilliams  · 技术社区  · 14 年前

    不知道这是在PR还是Beta中发生的,但是如果我在 HtmlHelper

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

    如果我用 网络表单 它工作得很好。怎么回事?

    解决办法

    如果我包括 @using SomeNamespace.Extensions Web.config配置

    8 回复  |  直到 11 年前
        1
  •  274
  •   marcind    14 年前

    自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 upgrade tool 以自动确保具有正确的配置值。

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

        2
  •  11
  •   Paul Rowland    13 年前

    但是对于一个单一的视图,你可以使用

        3
  •  6
  •   John Rasch    10 年前

    我在使用Razor的MVC4应用程序中也遇到了同样的错误。为了清理web.config文件,我删除了两个 webpages: 配置值:

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

    .Partial() 扩展方法消失。

        4
  •  5
  •   balint    8 年前

    在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" />
    
        5
  •  3
  •   Joseph Morgan    12 年前

    <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>
    
        6
  •  1
  •   user3459730    9 年前

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

        7
  •  0
  •   Community CDub    7 年前

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

        8
  •  -6
  •   nick4eva    14 年前

    因为ASP.netmvc3rtm已经发布,所以不需要Razor的配置部分。而且这些部分可以安全地移除。