如何防止超链接链接

时间:2020-03-05 18:49:13  来源:igfitidea点击:

是否有可能阻止asp.net超链接控件链接,即使其显示为标签,而无需实际将控件替换为标签?也许使用CSS或者设置属性?

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

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

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

解决方案

回答

如果我们只想修改链接的外观以使其看起来不像链接,则可以将" a"标签的CSS设置为不带有下划线:

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

尽管我建议不要在此处包括" hover",因为没有其他方法可以知道它是一个链接。

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

回答

这应该工作:

onclick="return false;"

如果没有,我们也可以将href更改为"#"。使它显示为其余文本是CSS,例如显示箭头而不是手是:

a.dummy {  
    cursor:default;  
}

回答

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

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

或者,我们使用链接并在"返回假"的位置添加onClick-Event;如果启用了JS,浏览器将无法进行导航。

但是:这对用户来说不是很令人困惑吗?为什么要创建看起来像链接但什么都不做的东西?

我们能否提供更多详细信息?我有种感觉,我们正在尝试解决一个更大的问题,该问题要比削弱链接更为有效::)

回答

如果我们要停止激活链接,通常的方法是链接到" javascript:void(0);",即:

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

回答

无论我们进行什么设置,超链接控件都将呈现为" 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类很有用。使在整个项目中定义自定义行为变得更加容易。

回答

这听起来像是JQuery的工作。只需为要删除URL的所有HyperLink控件指定特定的类名,然后将以下JQuery代码段应用于页面底部即可:

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

所有名称为" NoLink"的HyperLink控件都将自动删除其所有URL,并且该链接看起来只不过是文本。

一行JQuery可以解决问题。

回答

感谢所有输入,简短的答案似乎是"不,我们不能(无论如何都不好)",因此,我将不得不采用困难的方式并添加条件代码。

回答

如果我们在asp.net中使用databind,请处理数据绑定事件,如果禁用了该用户,则不要设置NavigateUrl。

回答

我们是否尝试过不设置NavigateUrl属性?如果未设置,则可能只是作为跨度渲染。