4

一点上下文

我们有一个最近被很多人使用的 MVC4 Web 应用程序,我们希望将其移植到 Orchard CMS。即使这是一个“管理”类型的应用程序,我们也不希望它成为 Orchard 管理部分的一部分。此应用程序目前已上线,我们希望迁移到 Orchard 对最终用户而言尽可能不可见。

我们现在在哪里

我们按照这个答案作为如何将现有的 ASP.NET MVC 应用程序与 Orchard CMS 集成,但我们使用布局(Razor 不是 Orchard),并且它在 Orchard 呈现页面的方式(默认情况下)不起作用(控制器操作返回的视图是不显示布局 - _ViewStart.cshtml 被忽略)。我试图在 View 方法中指定布局的路径,但它不起作用或路径不好,因为我们在一个模块中。有没有办法告诉 Orchard 使用 _layout.cshtml 文件并绕过 Orchard 主题?

4

2 回答 2

5

可以绕过 Orchard 主题。请注意,我使用 MvcMailer 执行此操作,因此输出的电子邮件是带有布局的“模板化”HTML。我不能肯定地说这适用于常规页面,但您可以尝试一下。只需在你的视野中拍下这个:

@inherits System.Web.Mvc.WebViewPage<object>
@{
  Layout = "_Layout.cshtml";
}

警告:您不能使用较新的 @model 指令。我只是回到旧样式并将我的模型放在“对象”所在的位置:

@using Namesapce.ViewModels
@inherits System.Web.Mvc.WebViewPage<MyViewModel>

否则,创建主题并覆盖 Orchard 的任何形状都非常简单。我有两种方法:

  1. 创建一个简单的主题,覆盖形状(假设你想要一个不同的登录,只需在主题的 ~/View 文件夹中创建 Login.cshtml),使用替代(使用 Layout-homepage.cshtml 覆盖主页的布局),拥有你的 . css等;
  2. 使用一些技巧来使用模块中的代码覆盖主题,并在主题文件夹中创建自己的视图和形状。例如,您可以在主题中有一个 Layout.cshtml 文件,其中包含显示形状的代码。但是,形状本身(.cshtml 文件)存在于您的模块中,这非常适合使用仪表板类型主题,该主题将调用在不同模块中名称相同但显示不同内容的形状。这方面的代码更深入一些。只需询问您是否需要样品。
于 2013-04-04T18:00:33.397 回答
1

tl;博士不,这是不可能的。

我不喜欢回答我自己的问题,但由于 Bertrand Le Roy 评论了我的问题而不是回答它(没有难过的感觉)而且他是 Orchard 团队的一员(或者曾经是?),我会用我所知道的来回答,直到有人有一个更好的答案。

据我了解,成为 Orchard 项目的一部分就是一路拥抱它,没有中间地带。无法在模块中绕过自定义(Orchard)视图引擎(与区域、布局、小部件、形状等一起使用)(回退到默认 MVC 引擎)。正如 Bertrand 建议的那样,我应该将我的项目转换为 Orchard 主题。

于 2013-03-13T18:04:07.540 回答