MVC从其他虚拟目录调用视图

时间:2013-09-20 11:23:38

标签: asp.net-mvc asp.net-mvc-4

我正在尝试创建一个“共享”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映射并因此访问其他应用程序?

2 个答案:

答案 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的根目录,以避免应用配置冲突