MVC 4中的命名空间分辨率

时间:2013-09-10 21:17:45

标签: asp.net-mvc-4 razor

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

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

在这个'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指令我指的是哪一个。

任何人都可以解释这种含糊不清的含义吗?

1 个答案:

答案 0 :(得分: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部分中引用了名称空间,这有效地将其全局放入了所有视图的范围内。