2013-09-10 5 views
1

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

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

В этом каталоге «Модели» есть класс «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; 

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

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

UPDATE:

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

+0

Это на вид. Кроме того, контроллер ссылается только на второй, хотя я не вижу связи между контроллером и представлением таким образом. –

+0

Во взгляде? Вы создаете экземпляр модели представления в представлении ??????? WOW, вы должны делать что-то очень плохое. Во всяком случае, одно и то же замечание верно для представления. Вам необходимо полностью квалифицировать тип модели, чтобы избежать возможной двусмысленности компилятора C#. –

+0

Я не делаю этого буквально. Я просто использовал пример. Фактически я использую общий (сетка кендо, если вы знаете), и у него есть проблема. =) –

Смежные вопросы