如何在ASP.NETMVC4项目之间共享HTML?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我有几个网站正在建设中,在页面中显示相同或相似的数据。为了减少代码重复,我所做的是创建了第三个项目/网站,并认为我将它用作共享HTML,java脚本,CSS,图像等的位置。

我可以使用相对路径在共享项目中包含JavaScript,CSS和图像。但是我无法呈现HTML的部分页面。当试图访问这两个试图加载部分页面使用这样的代码的网站:

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

我得到以下回应:

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

现在我已经搜索并尝试使用~前缀来指定解决问题的路径的根,但无济于事......仍然是同样的错误。

有关如何解决此问题的任何想法?

提问于
用户回答回答于

想渲染的视图位于Web应用程序根目录之外。至少出于安全原因,这是不允许的。

但是,可以执行的操作是将veiws(.cshtml)作为资源嵌入,方法是选择“嵌入为资源”构建操作,而不是默认操作。然后,使用NuGet包管理器安装和使用虚拟路径提供能够呈现像已经嵌入的视图在这里在这里,或这里

用户回答回答于

我们一直这样做。简单的(非编程)方法是在IIS中创建虚拟文件夹,映射到所有伴随网站共有的共享文件夹。我们通常为错误结果页面和其他通用内容执行此操作。

/Views/SharedVirtual/somefile.ascx

该路径/Views/SharedVirtual通过IIS的虚拟文件夹进行映射。然后在控制器中,我们可以做一个return View("/Views/SharedVirtual/somefile.ascx",somemodel);。它也适用于RenderPartial。

本地处理项目时,我使用mklink在项目文件夹中创建映射到共享公用文件夹的交接点。这种方式VS认为该文件夹是本地的,当它不是,并且可以在本地运行项目进行调试。

我们通常不使用Razor,但是这个概念应该和它的工作方式一样,因为它不是做共享映射的VS,而是它的OS和IIS。

需要注意的是,如果编辑视图,它们将在所有项目中更改,因此您必须小心编辑,以确保它们在所有引用它们的项目中都可以兼容。

扫码关注云+社区