2008-09-08 290 views
3

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

我知道将它标记为禁用作品,但随后显示得不同(变灰)。

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

我知道我真的应该用标签替换它们,但这看起来并不像使用CSS所说的去除链接能力那样优雅(如果可能的话)。它们已经以不同的颜色显示,所以显然它们是被禁用的用户。我只需要关闭链接。

+0

通过防止,你的意思是“防止它出现作为一个链接”或完全阻止它作为一个链接工作? – 2008-09-08 09:25:10

+0

两者,但它已经看起来不像一个链接,这是用CSS完成的。我只是需要使它不可点击。 – 2008-09-08 09:47:44

+0

生成此链接的代码已经非常复杂,我不愿意通过添加条件代码来添加更多复杂性,以便将其输出为标签而不是超链接(如果可以避免)。 – 2008-09-08 09:49:27

回答

6

这听起来像是JQuery的工作。只要给一个特定的类名来所有你想要的网址删除的超级链接控件,然后采用下列JQuery的片断到你的页面的底部:

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

所有与类名“NoLink的超级链接控件“会自动删除所有网址,链接看起来不过是文字。

一行JQuery可以解决您的问题。

2

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

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

虽然我建议不要在这里包含“悬停”,因为没有其他方式可以知道它是链接。

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

2

这应该工作:

onclick="return false;" 

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

a.dummy { 
    cursor:default; 
} 
4

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

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

或者您使用该链接并在“返回false”时附加onClick事件。这将使浏览器不执行导航 - 如果启用JS。

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

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

+0

我不希望它显示为链接或作为链接工作。我知道在这种特殊情况下它应该是一个标签。但是,所涉及的代码已经非常复杂,如果说CSS可以完成这项工作,我不愿意在'if'语句中增加更多的复杂性。 – 2008-09-08 09:54:31

2

如果你的意思是停止链接激活,通常的方法是链接到“javascript :void(0);“,即:

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

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类在我的项目文件。使整个项目定义自定义行为变得更容易。

2

感谢所有的输入,它看起来像一个简短的答案是'不,你不能(很好,反正)',所以我将不得不艰难的做法,并添加条件代码。

0

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

0

您是否试过而不是设置NavigateUrl属性?如果没有设置,它可能只是作为一个跨度渲染。

0

.fusion-link-wrapper {pointer-events:none; }

0

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

.avoid-clicks { 
    pointer-events: none; 
}