【发布时间】:2013-01-17 21:18:34
【问题描述】:
我正在尝试在我的 .cshtml 文件中使用自定义命名空间中的模型。但是,每当我尝试设置模型时,Razor 都会抛出 The type or namespace name could not be found 错误。
我有一个项目设置,它使用解决方案文件夹来帮助组织,如下所示:
MyViewModel.cs 文件中的代码如下所示:
namespace MyProject.ViewModels
{
public class MyViewModel
{
}
}
好的,这就是基本布局。问题是当我尝试在我的 Razor 视图中使用 MyViewModel 对象时,Razor 说它找不到命名空间。如此处所示:
我相信我正在做我应该做的每一件事。似乎 Razor 无法查看解决方案文件夹。如何让 Razor 识别 MyViewModel 对象?有什么我遗漏的吗?
请注意:我确实意识到我可以简单地更改我的 @using 语句以引用整个路径。但是,在我的项目中,我在 ViewModels 文件夹中有许多解决方案文件夹,我不想逐个指定。
更新
我接受了达林的回答,因为它成功地回答了这个问题。我还在下面提供了一些关于我的具体情况以及为什么会出现这个问题的更多信息。
我进一步研究了这个问题,并弄清楚了发生了什么。我通常使用 SparkViewEngine,它允许像这样引用我的视图模型:<viewdata model="ViewModels.MyViewModel"/> 当 Razor 不允许我以与我认为 Razor 有问题的相同方式引用视图模型时。
每个 ViewEngine 都会创建用于帮助生成视图的临时 CS 文件。 Spark 创建的临时文件使用“控制器”命名空间。在这种情况下,Spark 会在其临时 CS 文件中使用 MyProject.Controllers 命名空间。这意味着我可以在不指定完整命名空间的情况下引用ViewModels.MyViewModel 对象,因为它与生成的 CS 文件位于同一命名空间中。
Razor 生成的临时文件使用 ASP 命名空间。这意味着我不能在不指定完整命名空间的情况下引用 ViewModels.MyViewModel 对象,因为它与生成的 CS 文件不在同一个命名空间中。
【问题讨论】:
标签: c# asp.net-mvc razor namespaces