修改 sc:Link 使其不呈现 href 而是呈现 onclick 事件

Modify sc:Link so that it renders no href but onclick event

我想修改 sitecore sc:Link 控件,这样它就不会呈现带有 href 的 a 标签。我想让它调用一个 js 函数作为 onClick 事件。

页面编辑器功能应该保持不变。

我应该覆盖哪个 class?

我查看了 Sitecore.Web.UI.WebControls.Link 和 LinkProvider,但它们不包含呈现 html 的部分。

好吧,我很高兴弄清楚这个问题 - 碰巧它并不太复杂。

我发现的第一件事是 Sitecore 的链接不是用户控件,它们是 Web 控件 - 我以前没有真正使用过它,所以我不明白我刚刚完成的一半。

在内部,Sitecore 的 FieldControl class 只是将一堆属性收集在一起以呈现 link 元素 - 因此我们能够覆盖 PopulateParameters 虚方法(确保我们调用基方法使默认行为仍然发生)然后指定一个 onclick 属性。

这就是我的 class 的最终代码。

[ToolboxData("<{0}:JavascriptLink runat=server></{0}:JavascriptLink>")]
public class JavascriptLink : Sitecore.Web.UI.WebControls.Link
{
    protected override void PopulateParameters(SafeDictionary<string> parameters)
    {
        base.PopulateParameters(parameters);
        parameters.Add("onclick", "alert('test')");
    }
}

然后您需要注册该控件与注册用户控件略有不同 - 因为您在评论中提到您需要在全球范围内使用它,您可能希望在 web.config 中注册它- 我正在使用 this page as a guide