2011-02-05 3 views
3

Я работаю с ASP.Net MVC (3) в течение некоторого времени, и мне это очень нравится. Но одна вещь, которую я нахожу немного раздражающей, - это постоянно просматривать список контроллеров/представлений/моделей/сценариев. Так что мне интересно, есть ли способ сказать MVC искать файлы в другом месте?Изменение структуры каталогов ASP.Net MVC

Может быть кто-то может сказать мне, как просто сгруппировать файлы вместе с помощью контроллера, как:

Каталог:/членство

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

Сердечные приветы Улафа

+0

Я думаю, что вас интересуют MVC Области: http://msdn.microsoft.com/en-us/library/ ee671793.aspx –

+0

@Kirk Я думаю, что даже после использования областей MVC у вас все еще есть контроллеры/представления/модели в каждой области, которые ему нужно просматривать. –

+1

Установите Resharper. Чтобы перейти к контроллеру или представлению и т. Д. (С помощью сочетаний клавиш Idea), вы просто нажимаете ctrl-N и начинаете вводить имя, а затем выбираете из списка. Ваши инструменты облегчают жизнь. К сожалению, это не работает для скриптов: -/ – Sean

ответ

1

Я думаю, что вам нужно, чтобы получить расширения Solution Navigator через обновление Инструменты для VS 2010.

Таким образом, вы можете отобразить в навигаторе решения, в отличие от решения explorer, только открытые файлы, например. Делает это проще.

Кстати, удалите все модели папки и создать отдельную модель проекта, например:

MyApp.Domain 

Любое решение, которое находится за пределами основной выиграет от этого.

Как указано в комментариях к вашему вопросу, Areas также уменьшит ваши требования к навигации.

2

Я точно знаю, о чем вы говорите. Вот условия, в которых я нахожу структуру папок MVC по умолчанию быть обременительным:

  • Я использую модель за просмотр подход
  • Мой контроллер в основном работает только с этой одной конкретной точки зрения
  • I имеют некоторые javascript, которые относятся только к этому виду

Почему я хочу поместить каждую из этих частей в другую папку?

создать папку для представления в папке Views, поэтому у вас есть папка ~/Views/MyEntityList (точно так же, как традиционный MVC подход), но я ставлю все, относящиеся к этому компоненту там:

~/Views/MyEntityList/ 
     MyEntityListController.cs 
     MyEntityListModel.cs 
     MyEntityList.js 
     MyEntityList.aspx 

Я нахожу эту структуру, что приводит к тому, что разработчики оставляют развязанными друг от друга взгляды. Специальная конфигурация MVC не требуется, за исключением того, что браузеры могут напрямую обращаться к ресурсам .js.

Есть несколько архитектурных узоров, где это может быть не очень хорошим способом. Для подхода с моделью для просмотра (см. Los Techies для получения дополнительной информации) Мне очень нравится эта структура.

1

только «ищет файлов» происходит это с видом, все остальное просто условность, так что если вы хотите, вы могли бы:

Каталог:/членство

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

... но мнения должны быть в ~/Views/Membership

+0

Нет, виды могут быть где угодно. Вы просто не получите хороший поиск пути, который вы получаете нормально. Вы можете указать любой путь, который вам нравится в любом месте для вашего вида. –

+0

@Mystere Man: Да, вы можете использовать абсолютные пути. Я говорю о том, как фреймворк находит материал, поэтому, если вы не используете абсолютные пути, представления должны находиться в '~/Views'. –

0

Похоже, вы должны переопределить некоторые поведение в представлении двигателя. Вы можете написать See this question, чтобы получить лучшую идею.

0

Один из способов, я могу придумать, чтобы достичь этого, написав свой собственный механизм просмотра. Вы можете поместить все это под файлы в Controllers/Членский

  • MembershipController
  • LogOnView
  • LogOnModel
  • RegisterView
  • RegisterModel

модели не будет проблемой вы можете просто изменить пространство имен для моделей, единственная проблема связана с представлениями. Для этого напишите свой собственный механизм просмотра, чтобы ваше приложение mvc обнаружило физическое расположение файлов вида следующим образом.

public class CustomViewEngine : RazorViewEngine 
{ 
    public CustomViewEngine() 
    { 
     ViewLocationFormats = new[] 
     { 
      "~/Controllers/{1}/{0}.cshtml", 

     }; 
    } 
} 

В Global.asax.cs добавить ViewEngine в Application_Start(), включив следующий код

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CustomViewEngine()); 

Вы можете также должны заботиться о различных других факторов, таких как обновление атрибута макета в зависимости от где вы размещаете _Layout.cshtml.

Если вы используете области, добавьте также строковый массив AreaViewLocationFormats.

Вы можете выполнить дополнительную настройку, переопределив некоторые из таких методов, как FileExists, CreateView, CreatePartialView.

Примечание. Не забудьте скопировать файл web.config в папку представлений в контроллер членства. В противном случае приложение не находит требуемые пространства имен mvc и не находит таких символов, как viewbag, model и т. Д.

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