未找到 Razor HtmlHelper 扩展(或视图的其他命名空间)
我不知道这种情况是否发生在 PR 或 Beta 中,但如果我在 HtmlHelper
上创建扩展方法,它在 Razor 支持的页面中无法识别:
namespace SomeNamespace.Extensions {
public static class HtmlExtensions {
public static string Foo(this HtmlHelper html) {
return "Foo";
}
}
}
我将其添加到
部分:Web.config
中的
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<!-- snip -->
<add namespace="SomeNamespace.Extensions"/>
</namespaces>
</pages>
但在尝试查看页面时会引发编译错误:
@Html.Foo()
如果我使用 WebForms 重新创建页面,它就可以工作美好的。这是怎么回事?
解决方法
如果我在 Razor 视图中包含 @using SomeNamespace.Extensions
,那么它就可以工作,但我宁愿将其放在 Web.config
I don't know if this was happening in the PR or Beta, but if I create an extension method on HtmlHelper
, it is not recognized in a Razor powered page:
namespace SomeNamespace.Extensions {
public static class HtmlExtensions {
public static string Foo(this HtmlHelper html) {
return "Foo";
}
}
}
I added it to the <Namespaces>
section in Web.config
:
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<!-- snip -->
<add namespace="SomeNamespace.Extensions"/>
</namespaces>
</pages>
But it throws a compile error when trying to view the page:
@Html.Foo()
If I recreate the page with WebForms it works fine. What's the deal?
Workaround
If I include @using SomeNamespace.Extensions
in my Razor view, then it works, but I'd much rather just have it in Web.config
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
自 Beta 版以来,Razor 使用不同的配置部分来全局定义命名空间导入。在您的
Views\Web.config
文件中,您应该添加以下内容:使用 MVC 3 升级工具 自动确保您拥有正确的配置值。
请注意,您可能需要关闭并重新打开文件,编辑器才能拾取所做的更改。
Since the Beta, Razor uses a different config section for globally defining namespace imports. In your
Views\Web.config
file you should add the following:Use the MVC 3 upgrade tool to automatically ensure you have the right config values.
Note that you might need to close and reopen the file for the changes to be picked up by the editor.
正如接受的答案所示,您可以通过添加到配置文件的部分来将“using”添加到所有视图中。
但对于单个视图,您可以使用
As the accepted answer suggests you can add "using" to all views by adding to section of config file.
But for a single view you could just use
我在使用 Razor 的 MVC 4 应用程序中遇到了同样的错误。在尝试清理 web.config 文件时,我删除了两个
webpages:
配置值:恢复这些配置值后,页面将正确编译,并出现有关
.Partial 的错误()
扩展方法消失了。I had this same error in an MVC 4 application using Razor. In an attempt to clean up the web.config files, I removed the two
webpages:
configuration values:Once I restored these configuration values, the pages would compile correctly and the errors regarding the
.Partial()
extension method disappeared.我在 VS 2015 中遇到了这个问题。
以下为我解决了这个问题:
在应用程序设置中找到“webpages:Version”并将其更新到版本 3.0.0.0。我的 web.config 已
更新为
I had this issue in VS 2015.
The following solved it for me:
Find "webpages:Version" in the appsettings and update it to version 3.0.0.0. My web.config had
and I updated it to
我发现将此部分放入每个视图文件夹的 web.config 中可以解决该问题。
I found that putting this section in my web.config for each view folder solved it.
此错误表明您没有与您的项目正确关联的 razor 引擎。
解决方案:在“解决方案资源管理器”窗口中右键单击您的 Web 项目并选择“管理 Nuget 包...”,然后安装“Microsoft ASP.NET Razor”。这将确保安装正确的软件包,并将必要的条目添加到您的 web.config 文件中。
This error tells you that you do not have the razor engine properly associated with your project.
Solution: In the Solution Explorer window right click on your web project and select "Manage Nuget Packages..." then install "Microsoft ASP.NET Razor". This will make sure that the properly package is installed and it will add the necessary entries into your web.config file.
就我而言,使用 VS 2013,并且它本身不支持 MVC 3(即使您更改 ./Views/web.config): https: //stackoverflow.com/a/28155567/1536197
In my case use VS 2013, and It's not support MVC 3 natively (even of you change ./Views/web.config): https://stackoverflow.com/a/28155567/1536197
由于 ASP.NET MVC 3 RTM 已发布,因此不需要 Razor 的配置部分。并且这些部分可以安全地移除。
Since ASP.NET MVC 3 RTM is out there is no need for config section for Razor. And these sections can be safely removed.