1

我正在开发一个使用区域的 MVC 4 网站,我们称之为“MyMVC”。

与大多数 MVC 项目一样,网站根目录中有一个名为“Models”的文件夹。

在这个“模型”目录中,有一个名为“MyViewModel.cs”的类,其中包含一个名为“MyViewModel”的公共类,其命名空间为“MyMVC.Models”。

现在,在其中一个区域中,称为“Area1”,还有一个典型的 MVC 结构,其中还包含一个名为“Models”的目录。它还包含一个类“MyViewModel.cs”,该类还包含一个名为“MyViewModel”的类,这次的命名空间为“MyMVC.Areas.Area1.Models”。

在我正在处理的视图中,位于顶部的“Area1\Views”目录中:

@model MyMVC.Areas.Area1.Models.MyViewModel
@using MyMVC.Areas.Area1.Models

当我像这样引用 MyViewModel 时,例如:

MyViewModel mvm = new MyViewModel();

我收到一个模棱两可的错误,它认为我指的是另一个 MyViewModel 类,尽管如您所见,我已经明确指定了 @model 指令和 @using 指令,我指的是哪个类。

谁能解释一下歧义是什么?

4

1 回答 1

1

谁能解释一下歧义是什么?

在你看来,模棱两可。它在您的控制器代码中:

MyViewModel mvm = new MyViewModel();

如果在这个控制器中你有两个:

using MyMVC.Models;
using MyMVC.Areas.Area1.Models;

很明显,C# 编译器无法知道您指的是哪个类。您可以通过完全指定类的名称来消除歧义:

var mvm = new MyMVC.Areas.Area1.Models.MyViewModel();

更新:

您可能还会在文件<namespaces>部分中引用命名空间,~/Views/web.config这有效地将其纳入所有视图的全局范围。

于 2013-09-10T21:20:47.390 回答