Как предотвратить гиперссылку

Можно ли предотвратить связывание элемента управления asp.net Hyperlink, т. е. чтобы он отображался как метка, без фактической замены элемента управления меткой? Может быть, с помощью CSS или установки атрибута?

Я знаю, что пометка его как отключенного работает, но тогда он отображается по-другому (серым цветом).

Чтобы прояснить мою точку зрения, у меня есть список имен пользователей в верхней части моей страницы, которые создаются динамически с использованием пользовательского элемента управления. В большинстве случаев эти имена можно связать со страницей электронной почты. Однако, если пользователь был отключен, имя отображается серым цветом, но в настоящее время по-прежнему ссылается на страницу электронной почты. Я хочу, чтобы эти пользователи с ограниченными возможностями не связывались.

Я знаю, что на самом деле я должен заменить их меткой, но это не кажется таким элегантным, как простое удаление возможности связывания с использованием CSS (если это возможно). Они уже отображаются другим цветом, поэтому очевидно, что это пользователи с ограниченными возможностями. Мне просто нужно отключить ссылку.


person Simon Keep    schedule 08.09.2008    source источник
comment
Под предотвращением вы имеете в виду предотвращение появления ссылки или полное предотвращение ее работы в качестве ссылки?   -  person Jon Limjap    schedule 08.09.2008
comment
И то, и другое, но это уже не похоже на ссылку, это сделано с помощью CSS. Мне просто нужно сделать его не кликабельным.   -  person Simon Keep    schedule 08.09.2008
comment
Код, генерирующий эту ссылку, уже довольно сложен, и я не хочу усложнять его еще больше, добавляя вокруг него условный код, чтобы выводить его в виде метки вместо гиперссылки, если можно этого избежать.   -  person Simon Keep    schedule 08.09.2008


Ответы (11)


Это звучит как работа для JQuery. Просто дайте конкретное имя класса всем элементам управления HyperLink, URL-адреса которых вы хотите удалить, а затем примените следующий фрагмент кода JQuery в нижней части страницы:

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

У всех элементов управления HyperLink с именем класса «NoLink» будут автоматически удалены все их URL-адреса, и ссылка будет выглядеть не более чем текстом.

Одна строка JQuery может решить вашу проблему.

person NakedBrunch    schedule 08.09.2008

Мне любопытно, что это вы, что сделать с этим. Зачем вообще ссылка?

Это только для форматирования? В этом случае просто используйте ‹span› в HTML и используйте таблицы стилей, чтобы формат соответствовал ссылкам.

Или вы используете ссылку и прикрепляете событие onClick, где вы «возвращаете false»; что заставит браузер не выполнять навигацию - если JS включен.

Но: разве это не сбивает с толку ваших пользователей? Зачем создавать что-то, что выглядит как ссылка, но ничего не делает?

Можете ли вы предоставить более подробную информацию? У меня такое чувство, что вы пытаетесь решить более серьезную проблему, у которой есть решение получше, чем испортить ссылку :-)

person pilif    schedule 08.09.2008
comment
Я не хочу, чтобы он отображался как ссылка или работал как ссылка. Я знаю, что на самом деле это должно быть ярлыком в данном конкретном случае. Однако задействованный код уже довольно сложен, и я не хочу усложнять его оператором «если», если, скажем, CSS может выполнить эту работу. - person Simon Keep; 08.09.2008

Элемент управления Hyperlink будет отображаться как тег «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 в файлах моего проекта. Упрощает определение пользовательского поведения во всем проекте.

person Radu094    schedule 08.09.2008

Если вы просто хотите изменить внешний вид ссылки, чтобы она не выглядела как ссылка, вы можете настроить CSS для своих тегов «a», чтобы они не имели подчеркивания:

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

Хотя я бы посоветовал не включать здесь «hover», потому что не будет другого способа узнать, что это ссылка.

В любом случае, я согласен с @pilif здесь, это похоже на ожидающую катастрофу юзабилити.

person Jon Limjap    schedule 08.09.2008

Если вы хотите остановить активацию ссылки, обычным способом является ссылка на "javascript:void(0);", т.е.:

‹a href="javascript:void(0);"›foo‹/a›

person Andrew Johnson    schedule 08.09.2008
comment
Я не думаю, что помещать javascript в href - это правильный путь, хотя он работает. - person Slartibartfast; 08.09.2008

Это должно работать:

onclick="return false;"  

если нет, вы также можете изменить href на «#». Чтобы он отображался как остальная часть текста, используется css, например. отображение стрелки вместо руки:

a.dummy {  
    cursor:default;  
}  
person Slartibartfast    schedule 08.09.2008

Спасибо за весь вклад, похоже, что короткий ответ: «Нет, вы не можете (ну, в любом случае, не очень хорошо)», поэтому мне придется сделать это трудным путем и добавить условный код.

person Simon Keep    schedule 08.09.2008

Если вы используете привязку данных в asp.net, обработайте событие привязки данных и просто не устанавливайте NavigateUrl, если эти пользователи отключены.

person Matthew M. Osborn    schedule 08.09.2008

Пробовали ли вы просто не устанавливать свойство NavigateUrl? Если это не установлено, он может просто отображаться как диапазон.

person John Rutherford    schedule 08.09.2008
comment
Он отображается как тег A, даже если NavigateUrl не установлен. - person Timothy Lee Russell; 04.02.2014

.fusion-link-wrapper {указатель-события: нет; }

person Norman Bird    schedule 18.12.2017

Другое решение — применить этот класс к вашей гиперссылке.

.avoid-clicks {
  pointer-events: none;
}
person Hasan Ali    schedule 21.12.2017