首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >找不到Razor HtmlHelper扩展(或视图的其他命名空间)

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

Stack Overflow用户
提问于 2010-11-10 01:37:43
回答 8查看 123.5K关注 0票数 167

我不知道这是否发生在公关或测试版中,但如果我在HtmlHelper上创建了一个扩展方法,它在Razor支持的页面中是无法识别的:

代码语言:javascript
复制
namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}

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

代码语言:javascript
复制
<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>

但它在尝试查看页面时会抛出编译错误:

代码语言:javascript
复制
@Html.Foo()

如果我用WebForms重新创建页面,它工作得很好。怎么回事?

解决方法

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-11-10 01:47:04

从Beta开始,Razor使用不同的配置节来全局定义名称空间导入。在Views\Web.config文件中,您应该添加以下内容:

代码语言:javascript
复制
<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自动确保您具有正确的配置值。

请注意,您可能需要关闭并重新打开该文件,编辑器才能获取更改。

票数 274
EN

Stack Overflow用户

发布于 2011-12-14 13:44:46

正如公认的答案所建议的那样,您可以通过添加到配置文件的节来将"using“添加到所有视图中。

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

@使用SomeNamespace.Extensions

票数 11
EN

Stack Overflow用户

发布于 2014-05-30 05:06:52

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

代码语言:javascript
复制
<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4136703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档