【问题标题】:Can I render all zones to an HTML string in a controller method我可以在控制器方法中将所有区域呈现为 HTML 字符串吗
【发布时间】:2016-01-29 04:58:25
【问题描述】:

我正在尝试将内容项的 HTML 从控制器操作中呈现为字符串。从技术上讲,我只想在没有任何页眉/页脚的情况下获得它的“正文”部分。我想这样做是为了让内容项以我想要的方式呈现一次,然后将其显示为普通的果园页面,或者通过 ajax 请求内容项的 HTML 以将其显示在 JavaScript 应用程序的 div 中。我不想手动渲染 JavaScript 中的所有内容,因为这会重复我已经做过的布局逻辑。我想重用大部分服务器端渲染,以便任何更改都反映在我的普通果园页面和我的 JavaScript 页面中。我一直在挖掘代码并到处搜索并且已经接近但不是一直到那里。

我找到了这些:

How to render shape to string?

Using FindView in Orchard

在我的控制器中,我有:

var shape = _contentManager.BuildDisplay(contentItem);

使用上述两种方法中的任何一种,我都可以在我的控制器中将该形状呈现为 HTML 字符串。一切都是金色的。我正在获取该页面的正文并在 JS 中使用它。然后,我更改了一个放置文件:

改为:

正文在我的普通 Orchard 页面中移动到我想要的位置(AsideFirst),但从使用上述两种方法检索的 HTML 中消失了。

如果我在 BuildDisplay 调用之后查看 shape.Content.Items,我可以看到 body 的项目不再存在......为什么它没有呈现所有区域?或者,我想一个更具体的问题是为什么 BuildDisplay 方法没有构建完整的形状?有什么方法可以让我完成这项工作吗?

【问题讨论】:

    标签: orchardcms


    【解决方案1】:

    我尝试了一百万种不同的方法,最终成功了。不确定我是否完全明白,但我认为问题与我使用 shape.Content 的事实有关,并且我已将内容移出 Content 区域。也许当我查看 BuildDisplay 方法返回的内容时,我只是没有查看一些实际上确实包含我认为缺少的东西的新创建区域。显然,我需要了解更多关于区域和形状的信息......无论如何,我现在在放置文件中创建了一个名为“MainInfo”的新区域。我在从 BuildDisplay 返回的主形状上获得了 MainInfo 属性,并将 shape.MainInfo 传递给视图渲染代码,现在一切似乎都运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多