Пространство имен в MVC 4

Я работаю над веб-сайтом MVC 4, который использует области, позволяет называть его "MyMVC".

Как и в большинстве проектов MVC, в корне сайта есть папка под названием "Модели".

Внутри этого каталога "Models" есть класс "MyViewModel.cs", который содержит открытый класс "MyViewModel" с пространством имен "MyMVC.Models".

Теперь, в одной из областей, назовите это "Area1", существует также типичная структура MVC, которая также содержит каталог под названием "Модели". Он также содержит класс "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 ответ

Может ли кто-нибудь объяснить, что такое двусмысленность?

Двусмысленность не на ваш взгляд. Это в вашем коде контроллера:

MyViewModel mvm = new MyViewModel();

Если в этом контроллере у вас есть:

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

это более чем очевидно, что компилятор С# не знает, к какому классу вы обращаетесь. Вы можете устранить двусмысленность, полностью указав имя класса:

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

ОБНОВИТЬ:

Вы также можете иметь пространство имен, указанное в разделе вашего файла ~/Views/web.config который эффективно выводит его в область действия по всему миру во всех ваших представлениях.

licensed under cc by-sa 3.0 with attribution.