You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取当前页面信息的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代码:
    <a id="lnkSubscribe" runat="server">Subscribe</a>
    
    后台C#代码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:42:11