我不知道这是否发生在公关或测试版中,但如果我在HtmlHelper
上创建了一个扩展方法,它在Razor支持的页面中是无法识别的:
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重新创建页面,它工作得很好。怎么回事?
解决方法
如果我在我的Razor视图中包含@using SomeNamespace.Extensions
,那么它就可以工作,但我更愿意将它放在Web.config
中
发布于 2010-11-10 01:47:04
从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自动确保您具有正确的配置值。
请注意,您可能需要关闭并重新打开该文件,编辑器才能获取更改。
发布于 2011-12-14 13:44:46
正如公认的答案所建议的那样,您可以通过添加到配置文件的节来将"using“添加到所有视图中。
但是对于单个视图,您可以只使用
@使用SomeNamespace.Extensions
发布于 2014-05-30 05:06:52
我在使用Razor的MVC4应用程序中遇到了同样的错误。为了清理web.config文件,我删除了两个webpages:
配置值:
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
一旦我恢复了这些配置值,页面就会正确编译,有关.Partial()
扩展方法的错误也就消失了。
https://stackoverflow.com/questions/4136703
复制相似问题