C# 创建用于镜像文档内容(包括宏)的umbraco服务器脚本

C# 创建用于镜像文档内容(包括宏)的umbraco服务器脚本,c#,razor,umbraco,umbraco6,C#,Razor,Umbraco,Umbraco6,我正在从事一个翁布拉科项目,该项目有很多重复文档。我需要在我的导航结构中有多个文档,它们的内容相同,但标题不同,在导航树中的位置也不同。我创建了一个具有通用属性“copypage”(类型ContentPicker)的documenttype,编辑器可以在其中设置应该镜像哪个页面的内容。我目前对此的解决方案如下 var page = Library.NodeById(Model.copypage); @page.contents; 但这会导致镜像页面中包含的宏出现问题 编辑:我的问题是原始文档上

我正在从事一个翁布拉科项目,该项目有很多重复文档。我需要在我的导航结构中有多个文档,它们的内容相同,但标题不同,在导航树中的位置也不同。我创建了一个具有通用属性“copypage”(类型ContentPicker)的documenttype,编辑器可以在其中设置应该镜像哪个页面的内容。我目前对此的解决方案如下

var page = Library.NodeById(Model.copypage);
@page.contents;
但这会导致镜像页面中包含的宏出现问题


编辑:我的问题是原始文档上的宏访问文档的子项。这些子项不会作为子项复制到镜像页面。因此,我的目标是在原始页面的上下文中执行
@Html.Raw(umbraco.library.RenderMacroContent(page.contents.ToString(),Model.Id))

从另一个页面呈现内容的最受测试的解决方案是uComponents宏“RenderTemplate”。我

您可以使用Razor或任何您喜欢的工具构建模板,然后使用页面ID在另一个模板中呈现它。这通常用于在另一个页面上呈现许多小部件。您所需要的只是要呈现的页面的ID。宏还支持使用其他模板进行渲染

<umbraco:Macro runat="server" Alias="RenderTemplate" NodeIds="1,11,12" CurrentPage="1" EntriesPerPage="10" AltTemplateId="0" UseChildNodes="0" />

另一种解决方案是使用umbraco属性“umbraco内部重定向ID”。
此属性重定向到另一页,但保留初始请求的URL,屏蔽另一页的URL。

我自己找到了特定问题的答案。像下面这样更改我的每个自定义宏解决了我的问题

var widgetsFolder = Model.WidgetsFolders.First();
if (Model.HasValue("copypage")){
  var page = Library.NodeById(Model.copypage);
  widgetsFolder = page.WidgetsFolders.First();
}

我有权选择复制文档。该对话框要求“关联”这些文档。这听起来像是我正在寻找的功能,但它并不像我预期的那样工作。你做什么?“开发人员”部分中的关系类型是什么?关系在关系表中创建一行,但关系的作用取决于您。在版本6中,有一个复制内容的默认操作,即在另一个位置复制整个页面。我恐怕无法使用
RenderTemplate
umbracoInternalRedirectId
,因为它镜像了整个页面,包括导航、菜单等。