Dunno如果在PR或Beta中发生这种情况,但如果我创建了一个扩展方法HtmlHelper,则在Razor驱动的页面中无法识别:
namespace SomeNamespace.Extensions {
public static class HtmlExtensions {
public static string Foo(this HtmlHelper html) {
return "Foo";
}
}
}
Run Code Online (Sandbox Code Playgroud)
我把它添加到以下<Namespaces>部分Web.config:
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<!-- snip -->
<add namespace="SomeNamespace.Extensions"/>
</namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)
但是在尝试查看页面时会抛出编译错误:
@Html.Foo()
Run Code Online (Sandbox Code Playgroud)
如果我使用WebForms重新创建页面,它可以正常工作.这是怎么回事?
解决方法
如果我@using SomeNamespace.Extensions在我的Razor视图中包含它,那么它可以工作,但我更愿意将它包含在内Web.config
我将我的MVC应用程序从MVC 3升级到5.2.2,现在我收到了这个错误.我使用新的项目向导创建了一个全新的MVC项目,这很有效,我在两个项目中比较了我/web.config和Views/web.config文件,但没有看到任何看起来很重要的差异.
在对象浏览器中查看,我发现实际上有两个不同的HtmlHelper对象定义在System.Web.WebPages和中System.Web.Mvc,这似乎是相关的:

但我不确定如何处理这个事实.