Как обмениваться HTML между проектами ASP.NET MVC4

У меня есть несколько веб-сайтов, которые я создаю, которые отображают те же или похожие данные на страницах. Чтобы уменьшить дублирование кода, я создал третий проект/веб-сайт и решил, что я буду использовать его как место для общего HTML, java- script, CSS, изображений и т.д.

Я могу включить JavaScript, CSS и изображения в общем виде из общего проекта с использованием относительных путей. однако я не могу отображать частичные страницы HTML. при попытке доступа к двум веб-сайтам, которые пытаются загрузить частичную страницу, используя такой код:

@RenderPage("/SharedArtifacts/Views/MySharedViewscshtml")

Получаю следующий ответ:

The virtual path '/SharedArtifacts/Views/MySharedViewscshtml' maps to another application, which is not allowed.

Теперь я искал Google и пытался использовать префикс ~, чтобы указать корень пути для решения проблемы, но безрезультатно... все та же ошибка.

Любые мысли о том, как решить эту проблему?

Ответы

Ответ 1

Мы делаем это все время. Простым (не-программирующим) способом является создание виртуальных папок в IIS, которые сопоставляются с общей папкой, общей для всех сайтов-компаньонов. Обычно мы делаем это для страниц с результатами ошибок и другого общего контента.

/Views/SharedVirtual/somefile.ascx

Путь /Views/SharedVirtual отображается через виртуальные папки IIS. Тогда в контроллерах мы можем сделать return View("/Views/SharedVirtual/somefile.ascx",somemodel);. Он также работает с RenderPartial.

Локально при работе с проектами я использую mklink, чтобы создать точку соединения в папке проекта, которая отображается в общей общей папке. Таким образом, VS считает, что папка является локальной, когда ее нет, и может запускать проект локально для отладки.

Обычно мы не используем Razor, но концепция должна работать одинаково, поскольку не VS, который выполняет сопоставление акций, это ОС и IIS, которые есть.

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

Ответ 2

Представления, которые вы хотите отобразить, находятся за пределами корня веб-приложения. Это запрещено по крайней мере по соображениям безопасности.

Однако вы можете вставлять veiws (.cshtml) в качестве ресурсов, выбирая действие "Вставить как ресурс" вместо стандартного. Затем, используя диспетчер пакетов NuGet, установите и используйте Поставщик виртуальных путей, способный отображать уже внедренные представления, такие как здесь, здесь или здесь.

Ответ 3

ASP.NET MVC будет выглядеть в одной сборке для представления. Помещение представления или HTML в другую сборку будет неудобным для фреймворка. Внутри я не думаю, что фреймворк поддерживает размещение View/HTML вне сферы сборки. Возможно, вам придется написать какой-то пользовательский код или расширить фреймворк, его открытый исходный код.

Ответ 4

Когда мне нужно обмениваться кодами между несколькими проектами, я обычно использую функцию open as link visual studio. Это позволяет вам иметь один файл для нескольких проектов.

https://msdn.microsoft.com/en-us/library/windows/apps/jj714082(v=vs.105).aspx