2013-09-20 4 views
1

Я пытаюсь создать «совместное» приложение MVC, которое может использоваться для всех распространенных данных, которые используются другими MVC и устаревшими веб-приложениями.MVC, вызывающий представления из других виртуальных каталогов

К примеру, у меня есть два виртуальных каталогов установки на моем сервере:

mysite.com/Report 
mysite.com/Base 

Так что я хотел бы быть в состоянии сделать это, чтобы это включить вид из папки «базовой» в " Сообщить «один»;

@Html.Partial("/Base/Views/Shared/_NavigateMenu.cshtml") 

Обратите внимание, что ~ в отчете будет отправлено на mysite.com/Report, я не могу его использовать.

Однако делать это приводит к следующим исключением:

The virtual path '/Base/Views/Shared/_NavigateMenu.cshtml' maps to another application, which is not allowed. 

Я знаю о районах, однако есть много недостатков в их использовании, во-первых, я не могу (или очень трудно) для переноса существующих устаревших приложений в область, также логически, лучше, чтобы каждое приложение MVC было разделено и имело место для общих объектов. (Не только просмотры, но css, изображения и т. Д.)

Итак, вопрос в том, как я могу «разрешить» MVC сопоставлять и, таким образом, получать доступ к другим приложениям?

ответ

1

Пытаясь поделиться-анкетой MVC в основном пытается разделить несколько различных компонентов:

  • контроллеры должны быть разделены через отдельную библиотеку классов, достижимы через регистрации площади
  • Модели может быть в любых ссылочных библиотеках классов

для просмотров, я предполагаю, что базовая папка корневого каталога приложения содержит приложение web.config. Views, хостинг взглядов, может содержать web.config относительно взгляды рендеринга (скажем, для конфигурации бритвы)

Views Для использования в приложении Report, вы должны создать виртуальный каталог SharedViews (или любое имя вы хотите) в Report , который будет указывать на физический путь Base/Views.

Тогда вы сможете написать:

@Html.Partial("~/SharedViews/Shared/_NavigateMenu.cshtml") 

Точки являются:

  • имея виртуальный каталог в Report, чтобы избежать переключения из приложения к другому
  • имея этот виртуальный каталог не ссылается на корневой каталог Base, чтобы избежать конфликтов конфигурации приложения.
+0

Большое спасибо. Да, я просто хочу добавить виды для таких вещей, как постоянное меню навигации, одно место для jquery et al и т. Д. Так что ваше высказывание - единственный способ сделать это - добавить виртуальный каталог в IIS, чтобы сделать это что «база» находится в приложении «отчет»? – BJury

+0

Еще раз спасибо! Я добавил виртуальный каталог, и он работает. Немного взлома действительно, что является неудачным. Области просто не дают четкого разделения различных функций, таких как разные проекты в виртуальных каталогах. Кажется, это довольно большое слабое место в структуре MVC. – BJury

+0

@BJury Что касается статических активов, они не обязательно должны находиться в общем виртуальном каталоге. Но имейте в виду, что они будут доставлены с конфигурацией приложения, которое их размещает (кодирование, сжатие, кеш и т. Д.). Кроме того, если вы ищете более распространенные части mvc на более высоком уровне, вы можете взглянуть на «переносные области», – jbl

1

вы можете решить эту проблему с помощью полукокса ~ до того виртуального пути т.е.

@Html.Partial("~/Base/Views/Shared/_NavigateMenu.cshtml") 

или еще

, если он указан путь установить в качестве виртуального каталога в IIS, чем это может относиться к нему как другие хотя он находится в том же каталоге, что и основное приложение.

+0

Но база находится в другом Виртуальном каталоге, ~ будет домашним путем результатов. , Например mysite.com/Results/, поэтому ему нужно получить mysite.com/base/views ... – BJury

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