c# - Views/Web.config 或 @using 都没有将 MVC 项目的命名空间添加到 View

标签 c# asp.net-mvc-4 razor visual-studio-2012

我已经束手无策了。

底部重现步骤

我在 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/

相关文章:

c# - 文本文字中的 WPF 绑定(bind)

c# - validateRequest ="false"表现得很奇怪

razor - 在 blazor 页面中使用 SSVG

c# - asp.net Html.CheckBoxListFor,位置不存在

C# - 使用 Int 与 Long 的相同计算速度更慢?

c# - xsd.exe C# 文件到 XSD 文件

asp.net-mvc-4 - Google Analytics(分析)中的自定义变量

asp.net - ScriptBundle 在 Debug模式下添加完整文件和缩小文件

c# - MVC4 不在浏览器中保存 cookie

jquery - 使用 Html.BeginForm 内的启动按钮加载带有部分 View 的 jQuery 对话框