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

StackOverflow https://stackoverflow.com/questions/49346

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Все элементы управления гиперссылками с именем класса "NoLink" автоматически удалят все свои URL-адреса, и ссылка будет выглядеть не более чем текстом.

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

Другие советы

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

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

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

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

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

Элемент управления гиперссылкой будет отображаться как тег "a" "/ a" независимо от того, какие настройки вы используете.Вы можете настроить класс CSS, чтобы ссылка выглядела как обычная метка.

В качестве альтернативы вы можете создать пользовательский элемент управления, который наследуется от System.Web.UI.WebControls.Гиперссылка и переопределить метод визуализации

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

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

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

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

В любом случае, я согласен с @pilif, это выглядит как катастрофа юзабилити, которая вот-вот произойдет.

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

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

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

onclick="return false;"  

если нет, вы также можете изменить href на "#".Чтобы он отображался как остальной текст, используется css, напримеротображение стрелки вместо руки - это:

a.dummy {  
    cursor:default;  
}  

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

Если вы используете databind в asp.net обработайте событие databinding и просто не устанавливайте NavigateUrl, если этот параметр users отключен.

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

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

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

.avoid-clicks {
  pointer-events: none;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top