我已经束手无策了。
底部重现步骤
我在 Visual Studio 2012 Update 3 中创建了一个 MVC 4 项目,比如 MyProj.Mvc
。
我听从了建议here将我的GlobalResources.resx
放在项目下的Resources
文件夹中,这样它就会编译成DLL。我查看了 GlobalResources.resx.cs
中生成的代码,一切都是公开的。我可以从其他 .cs
文件(例如 HomeController.cs
)访问资源。
我无法在任何 View 的当前上下文中获取 MyProj.Mvc
命名空间。
例如,在任何 Razor View 中,我都可以引用这样的资源:
@MyProj.Mvc.Resources.GlobalResources.AppName
但是,当我尝试执行以下操作时:
@Resources.GlobalResources.AppName
我得到一个错误。未找到 Resources
命名空间。
我听从了建议 here并将命名空间放入我的 ~/Views/Web.config 中:
<add namespace="MyProj.Mvc" />
而且, View 仍然无法识别 Resources
命名空间。重建和/或重新启动 Visual Studio 不起作用。
“好吧,”我想,“去他妈的,我会在页面顶部放一个 @using
语句,稍后再处理它。”
@using MyProj.Mvc // put at the top of the page
而且, View 仍然无法识别 Resources
命名空间。
所以,请帮忙。帮助!我可能做错了什么,将 @using
语句放在页面顶部仍然没有将命名空间纳入范围?
重现步骤:
我已经能够用全新、干净的项目重现这一点。 Visual Studio 2012 Update 3,创建一个名为 MyProj.Mvc
的新 ASP.NET MVC 4 Web 应用程序。对于模板,我主要关注 Internet 应用程序,尽管我也在我的机器上使用 Empty 项目复制了它;选择 Internet 应用程序只是为了更好地匹配我所拥有的。在 _Layout.cshtml
的顶部,放置 @using MyProj.Mvc
。在页面的其他地方,开始输入 @Controllers.HomeController
。请注意,自动完成甚至不会尝试提供 Controllers
命名空间,更不用说 HomeController
了。
现在变得奇怪了:
所以,失败了。不过,这里有一些东西。尝试将 using
语句更改为 @using MyProj.Mvc.Controllers
。现在,返回并开始输入 @HomeController
。行得通!
那么,是什么让项目的命名空间如此特别,以至于它拒绝进入 View 的范围???
最佳答案
我认为您误解了如何访问命名空间。
仅仅因为您在代码中引用了命名空间并不意味着您可以直接访问该命名空间的命名空间。
例如,试试这个:
创建一个名为 MyDemoClass
的新 C# 类像这样:
using System.Web;
public class MyDemoClass
{
Mail.MailMessage // can't do this
}
注意我知道 System.Web.Mail
是一个命名空间,我知道我可以访问它。但仅仅因为我是using System.Web
并不意味着我可以跳转到我的代码并输入 Mail.<etc>
.编译器不知道我想要什么。幸运的是它足够聪明,可以提出建议
Do you mean:
System.Net.Mail
System.Web.Mail
这就是为什么你可以 using MyProj.Mvc.Controllers
并访问您的 Controller 类,但您不能简单地 using MyProj.Mvc
然后尝试访问命名空间 Controllers
从那里。它不起作用。
这也是为什么你会看到很多这样的东西:
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
取而代之的是:
using System;
using Web;
using Mvc;
using Html;
这感觉很多余,我知道,但事情就是这样。
尝试确保最后一个 namespace 被引用。如果Resources
是一个命名空间那么你需要 using
或将其添加到 Web.config
中.
关于c# - Views/Web.config 或 @using 都没有将 MVC 项目的命名空间添加到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070449/