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

如何通过单个HyperLink打开多个页面?Telerik GridHyperLinkColumn实现问询

实现点击单个HyperLink打开所有URL的方法

核心思路是利用客户端JavaScript来批量打开链接——因为服务器端无法直接触发多个浏览器窗口的打开操作。以下是具体的实现步骤:

1. 修改服务器端绑定逻辑

在Grid的ItemDataBound事件中,把HyperLink的单一跳转行为改成执行批量打开的JS脚本:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    // 只处理数据行
    if (e.Item is GridDataItem dataItem)
    {
        HyperLink link = (HyperLink)dataItem["documents"].Controls[0];
        if (link.NavigateUrl.Contains(";"))
        {
            string[] linkUrls = link.NavigateUrl.Split(';');
            StringBuilder jsScript = new StringBuilder("javascript:");
            
            foreach (string url in linkUrls)
            {
                string cleanedUrl = url.Trim();
                if (!string.IsNullOrEmpty(cleanedUrl))
                {
                    // 转义URL中的特殊字符,避免JS语法错误
                    string encodedUrl = HttpUtility.JavaScriptStringEncode(cleanedUrl);
                    jsScript.Append($"window.open('{encodedUrl}');");
                }
            }
            
            // 将HyperLink的跳转地址设置为JS脚本
            link.NavigateUrl = jsScript.ToString();
            // 可选:添加提示,避免用户疑惑弹窗被拦截
            link.ToolTip = "点击将打开所有关联文档(请允许浏览器弹窗)";
        }
    }
}

2. 处理浏览器弹窗拦截

因为浏览器默认会拦截非用户主动触发的弹窗,而这里的window.open是用户点击HyperLink时触发的主动操作,大部分浏览器会允许,但还是建议:

  • 在HyperLink的ToolTip里提示用户允许弹窗
  • 如果遇到拦截情况,可以引导用户手动允许当前网站的弹窗权限

3. 备选方案:使用OnClick事件绑定

如果不想修改NavigateUrl,也可以通过给HyperLink添加onclick事件实现,逻辑更清晰:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem dataItem)
    {
        HyperLink link = (HyperLink)dataItem["documents"].Controls[0];
        if (link.NavigateUrl.Contains(";"))
        {
            string[] linkUrls = link.NavigateUrl.Split(';');
            StringBuilder jsScript = new StringBuilder();
            
            foreach (string url in linkUrls)
            {
                string cleanedUrl = url.Trim();
                if (!string.IsNullOrEmpty(cleanedUrl))
                {
                    string encodedUrl = HttpUtility.JavaScriptStringEncode(cleanedUrl);
                    jsScript.Append($"window.open('{encodedUrl}');");
                }
            }
            
            // 设置HyperLink为占位地址,绑定onclick事件并阻止默认跳转
            link.NavigateUrl = "#";
            link.Attributes.Add("onclick", $"{jsScript.ToString()} return false;");
            link.ToolTip = "点击将打开所有关联文档(请允许浏览器弹窗)";
        }
    }
}

注意事项

  • 确保URL格式正确,过滤掉空字符串或无效地址
  • 必须对URL进行JS编码,防止单引号、空格等特殊字符导致脚本执行失败
  • 测试不同浏览器的弹窗行为,确保功能正常

内容的提问来源于stack exchange,提问作者Ярослав Оверченко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:00:17