在 2sxc 中,当将单独的应用程序作为内部内容嵌入到 WYSIWYG Rich 输入中时,渲染的内部应用程序的上下文将返回父级的 ModuleID。
当在文章的描述字段中嵌入任何其他应用程序时,可以使用 2sxc 的博客应用程序来演示这一点,其中返回的 ModuleID 是父模块的。
这提出了一个问题,即来自嵌入式应用程序的数据利用 ModuleID 进行过滤。似乎没有任何其他与上下文相关的唯一子过滤器属性可供使用,例如在应用程序中呈现时父级的 EntityID 或 ContentBlockID(例如,在“data-cb-id”属性上使用的值)内容块的“sc-content-block”包装器)。
我们查看了 2sxc 文档,并尝试引用 CmsContext.Block.Id 等值以及内部应用程序中可访问的其他值,但似乎都没有返回合适的唯一值。
我们已经暂时解决了这个问题,正如其他人在博客应用程序中提到的那样,通过使用文章的 URL 片段添加项目子过滤器,但如果它们发生更改,这不是一个可靠的长期方法。
TLDR;有没有什么方法可以在剃刀模板的父级上下文中获取内部内容应用程序的唯一标识符?
仅供参考:我们正在运行最新版本的 DNN (v9.13.3)、2sxc (v17.07) 和博客应用程序 v6.17。
你很幸运,它就在那里,但尚未记录,但也可以改进一点。
CmsContext.Block.Id
确实返回您需要的值。我相信它从大约开始就一直有效。 v14 但从未公开记录过。我会尽快改正。
请注意,
CmsContext.Module.Block.Id
也可以工作,但这将返回根块的块ID。
我还会在 17.08 中添加
.Guid
,因为如果导出/导入应用程序,ID 可能会发生变化,而 Guid 将保持稳定。
好吗?