我正在尝试创建一个“共享”MVC应用程序,该应用程序可用于其他MVC和传统Web应用程序使用的所有常见数据。
例如,我的服务器上有两个虚拟目录设置:
mysite.com/Report
mysite.com/Base
所以我希望能够做的是在'Report'中包含'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映射并因此访问其他应用程序?
答案 0 :(得分:1)
您可以在虚拟路径之前使用char ~
解决此问题,即
@Html.Partial("~/Base/Views/Shared/_NavigateMenu.cshtml")
或者
如果指定的路径在IIS中设置为虚拟目录,则可能将其视为另一个应用程序,即使它与主应用程序位于同一目录中。
答案 1 :(得分:1)
尝试共享MVC应用程序基本上是尝试共享几个不同的组件:
对于视图,我假设基础Base
应用程序根文件夹包含应用程序web.config。托管视图的Views
可以包含相对于视图呈现的web.config(比如用于razor配置)
要在应用程序报告中使用Views
,您必须在SharedViews
中创建一个虚拟目录Report
(或任何您想要的名称),它将指向{{的物理路径1}} / Base
。
然后你就可以写:
Views
要点是:
@Html.Partial("~/SharedViews/Shared/_NavigateMenu.cshtml")
中设置虚拟目录,以避免从应用切换到另一个Report
的根目录,以避免应用配置冲突