5

是否可以阻止asp.net 超链接控件链接,即它显示为标签,而实际上不必用标签替换控件?也许使用 CSS 或设置属性?

我知道将其标记为禁用是可行的,但随后会以不同的方式显示(灰显)。

为了澄清我的观点,我在页面顶部有一个用户名列表,这些用户名是使用用户控件动态构建的。大多数情况下,这些名称可链接到电子邮件页面。但是,如果用户已被禁用,则名称显示为灰色,但当前仍链接到电子邮件页面。我希望这些禁用的用户不要链接。

我知道我真的应该用标签替换它们,但这似乎不像使用 CSS 说(如果可能的话)删除链接能力那么优雅。它们已经以不同的颜色显示,因此很明显它们是禁用用户。我只需要关闭链接。

4

12 回答 12

6

这听起来像是 JQuery 的工作。只需为您希望删除 URL 的所有 HyperLink 控件指定一个特定的类名,然后将以下 JQuery 片段应用到页面底部:

$(document).ready(function() {
    $('a.NoLink').removeAttr('href')
});

所有类名为“NoLink”的 HyperLink 控件将自动删除其所有 URL,并且链接看起来只是文本。

一行 JQuery 就可以解决你的问题。

于 2008-09-08T09:40:32.393 回答
4

我很好奇你用它来完成什么。为什么要使用链接?

只是为了格式化吗?在这种情况下,只需在 HTML 中使用 <span> 并使用样式表使格式与链接匹配。

或者您使用链接并附加一个 onClick 事件,您“返回 false”;这将使浏览器不进行导航 - 如果启用了 JS。

但是:这对您的用户来说不是非常混乱吗?为什么要创建看起来像链接但什么都不做的东西?

你能提供更多细节吗?我有这种感觉,您正在尝试解决一个比破坏链接更好的解决方案的更大问题:-)

于 2008-09-08T09:25:26.750 回答
3

无论您进行何种设置,超链接控件都将呈现为“a”“/a”标签。您可以自定义 CSS 类以使链接看起来像普通标签。

或者,您可以构建一个继承自 System.Web.UI.WebControls.HyperLink 的自定义控件,并覆盖 Render 方法

protected override void Render(HtmlTextWriter writer)
        {
            if (Enabled)
                base.Render(writer);
            else
            {
                writer.RenderBeginTag(HtmlTextWriterTag.Span);
                writer.Write(Text);
                writer.RenderEndTag(HtmlTextWriterTag.Span);
            }
        }

     }

可能有点矫枉过正,但它会满足您的要求。

另外,我发现在我的项目文件中有一个基本的 asp:CustomHyperlink asp:CustomButton 类很有用。使在整个项目中定义自定义行为变得更加容易。

于 2008-09-08T09:39:59.540 回答
2

如果您只想修改链接的外观以免看起来像一个链接,您可以将“a”标签的 CSS 设置为没有下划线:

a: link, visited, hover, active {
    text-decoration: none;
}

虽然我建议不要在此处包含“悬停”,因为没有其他方法可以知道它是一个链接。

无论如何,我在这里同意@pilif,这看起来像是一场等待发生的可用性灾难。

于 2008-09-08T09:20:37.603 回答
2

这应该有效:

onclick="return false;"  

如果没有,您也可以将 href 更改为“#”。使其显示为文本的其余部分是 css,例如显示箭头而不是手是:

a.dummy {  
    cursor:default;  
}  
于 2008-09-08T09:23:06.817 回答
2

如果您要阻止链接激活,通常的方法是链接到“javascript:void(0);”,即:

<a href="javascript:void(0);">foo</a>

于 2008-09-08T09:26:54.377 回答
2

感谢您的所有输入,看起来简短的回答是“不,你不能(无论如何也不是很好)”,所以我必须努力做到这一点并添加条件代码。

于 2008-09-08T10:16:00.590 回答
0

如果您在 asp.net 中使用数据绑定,请处理数据绑定事件,并且如果该用户被禁用,则不要设置 NavigateUrl。

于 2008-09-08T22:06:48.730 回答
0

您是否尝试过设置 NavigateUrl 属性?如果未设置,它可能只是呈现为跨度。

于 2008-09-08T22:09:52.560 回答
0

.fusion-link-wrapper { 指针事件:无;}

于 2017-12-18T02:32:29.957 回答
0

另一种解决方案是在您的超链接上应用此类。

.avoid-clicks {
  pointer-events: none;
}
于 2017-12-21T12:02:00.020 回答
0

CSS 解决方案使没有 href 的标签(如果 NavigateURL 绑定到 null/空字符串,则 asp:HyperLink 将产生)在视觉上与周围的文本无法区分:

a:not([href]), a:not([href]):hover, a:not([href]):active, a:not([href]):visited {
    text-decoration: inherit !important;
    color: inherit !important;
    cursor: inherit !important;
}

不幸的是,这不会告诉屏幕阅读器不要将其作为链接读出 - 尽管没有 href,它是不可点击的,所以我希望它已经不会被识别为这样。不过我还没有机会测试它。

(如果您也想对带有 href="" 的链接以及缺少 href 的链接做同样的事情,您也需​​要添加pointer-events:none,因为否则空的 href 将重新加载页面。这肯定会让屏幕阅读器仍在处理不过,它是一个链接。)

在 OP 的用例中,如果您仍然从数据库中填充了 href,但有一个布尔值指示链接是否应该是“真实”链接,则应该使用它来禁用链接,并添加a:disabled到上面的选择器列表。然后禁用的链接也将看起来像纯文本而不是灰色链接。(禁用链接也会将该信息提供给屏幕阅读器,因此这比仅使用指针事件更好:无和类。)

注意事项 - 如果您在全局而不是为特定页面添加此类规则,请记住注意标签没有(有效)href,但您提供点击处理程序的情况 - 您仍然需要查看这些规则/行为像链接。

于 2022-01-29T01:06:13.773 回答