页面模板 - 未将对象引用设置为对象的实例

Page template - Object reference not set to an instance of an object

我有一个页面模板,其中包含以下这行代码:

<div id="<%= CurrentDocument.NodeAlias %>" class="lvl3">

一切正常 - id 值正确显示。但是,当使用 页面模板 模块 设计选项卡 时,会出现错误。在事件日志中,我看到错误消息 "Object reference not set to an instance of an object"。取出 id 片段,错误消失了。我不确定错误的含义以及如何修复它。你能帮忙吗?

出于其他目的,我确实需要一些特定于页面的唯一标识符(在本例中为 NodeAlias)。

不支持在页面模板布局上使用代码块。我假设您使用的是 ASCX 布局。此外,您的代码看起来更像是一个宏 - 那么,也许您正在使用 HTML layout type?如果是,那么语法应该是 {%CurrentDocument.NodeAlias%}
如果您使用的是 ASCX 布局,您可能还会遇到此问题:https://devnet.kentico.com/articles/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks
请注意,在门户引擎中,生命周期有所修改,因此我们无法确保代码块每次都能正常工作——有时它可能会正常工作。主要看其他网站parts/controls在页面模板中以什么顺序放置。我宁愿推荐使用文章中的解决方法。 或者,您可以尝试一下,但不能保证,这在某些情况下可能会起作用,您需要指定完整的命名空间:

<%= CMS.MacroEngine.MacroResolver.Resolve("{%CurrentDocument.NodeAlias#%}") %>

答案很简单 - 如果您在 Kentico Page Templates 应用程序中打开您的页面模板 - 您的 CurrentDocument 始终为空(因为您正在编辑没有特定文档的模板本身)。

您可以使用“设计”选项卡在 Pages 应用程序中执行完全相同的操作。也可以从那里编辑所有模板属性,包括布局: