获取当前页面信息的Macro问题:订阅图标传参失效
解决Kentico宏在Repeater代码片段中不解析的问题
看起来你遇到的是Kentico宏没有被正确解析,直接输出了宏字符串的问题,我来帮你一步步排查解决:
1. 修正宏语法错误
你写的宏里多了个多余的#,这会导致Kentico无法识别正确的宏格式。把链接改成下面的写法:
<a href="/subscribe?p={% CurrentDocument.DocumentName %}">Subscribe</a>
另外,为了避免文档名称里的特殊字符破坏URL,建议加上URL编码,让参数更安全:
<a href="/subscribe?p={% CurrentDocument.DocumentName | UrlEncode %}">Subscribe</a>
2. 确保代码片段允许宏解析
因为你的代码是放在Repeater里的可复用片段,需要确认承载这段代码的容器(比如HTML Web Part或者Repeater的Item Template)开启了宏解析:
- 如果是用Kentico的可视化Web Part,找到对应Web Part的属性面板,勾选Enable macros(或者类似“解析宏”的选项);
- 如果是自定义的ASCX控件,用后台代码获取文档名称会更可靠:
前台ASCX代码:
后台C#代码:<a id="lnkSubscribe" runat="server">Subscribe</a>using CMS.DocumentEngine; using System.Web; protected void Page_Load(object sender, EventArgs e) { // 获取当前请求的页面文档名称 string docName = DocumentContext.CurrentDocument.DocumentName; // 编码后拼接URL,避免特殊字符问题 lnkSubscribe.HRef = $"/subscribe?p={HttpUtility.UrlEncode(docName)}"; }
3. 确认CurrentDocument上下文正确
如果你的Repeater是遍历其他文档(比如新闻列表),此时CurrentDocument可能指向的是Repeater里的当前项,而不是用户正在浏览的页面。这种情况下,要改用SiteContext.CurrentDocument来获取当前页面的文档名称:
<a href="/subscribe?p={% SiteContext.CurrentDocument.DocumentName | UrlEncode %}">Subscribe</a>
按照上面的步骤调整后,宏应该就能正确解析,把当前页面的文档名称附加到订阅链接里了!
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

