1

我正在尝试创建一个“共享”MVC 应用程序,该应用程序可用于其他 MVC 和旧版 Web 应用程序使用的所有常见数据。

例如,我在服务器上设置了两个虚拟目录:

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 映射并访问其他应用程序?

4

2 回答 2

1

~您可以在虚拟路径之前 使用 char 解决此问题,即

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

要不然

如果在 IIS 中指定路径设置为虚拟目录,则它可能会将其视为另一个应用程序,即使它与主应用程序位于同一目录中。

于 2013-09-20T11:32:55.693 回答
1

尝试共享 MVC 应用程序基本上是尝试共享几个不同的组件:

  • 控制器应通过单独的类库共享,可通过区域注册访问
  • 模型可以在任何引用的类库中

对于视图,我假设基本Base应用程序根文件夹包含应用程序 web.config。Views,托管视图,可以包含一个相对于视图渲染的 web.config(比如剃刀配置)

Views在应用程序报告中使用,您必须在 中创建一个虚拟目录SharedViews(或您想要的任何名称)Report,该目录将指向Base/的物理路径Views

然后你就可以写:

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

要点是:

  • 有一个虚拟目录Report,以避免从一个应用程序切换到另一个应用程序
  • 让这个虚拟目录不引用 的根目录Base,以避免应用配置冲突
于 2013-09-20T12:14:28.490 回答