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

Страницы ссылающиеся сами на себя нежелательны и путают пользователей. Якоб Нильсен пишет про это в своей статье 10 главных ошибок веб-дизайна 2003 года.

Обычный путь решения этой задачи в ASP.NET, это поставить PlaceHolder's и в зависимости от того, является страница текущей или нет - показывать нужный текст или ссылку. Или можно например указать пустое значение ссылки href для тэга <A>, тогда браузер не будет отображать ее как ссылку (правда не уверен насчет кроссплатформенности такого решения). Заниматься всем этим достаточно скучно и нудно.

Собственно для решения этой задачи я создал достаточно простой контрол MutableHyperLink, который наследуется от стандартного контрола ASP.NET HyperLink. Этот контрол автоматически определяет страницу на которой он находится, и если ссылка ведет на эту же страницу - отображается тэг SPAN с таким же содержимым, как если бы это была ссылка. Дополнительно можно задать отдельный класс стилей для SPAN, что позволяет выделить этот элемент.

Пример использования этого контрола можно посмотреть на этом сайте, кликните например на ссылку "Архив" или "Написать мне".

 
Пример выделенной ссылки.

Краткая документация по контролу MutableHyperLink

Помимо стандартных, унаследованных от класса HyperLink, доступны следующие свойства:

SpanCssClass - класс CSS, который будет задан у контрола, если он отображается как SPAN.

ParameterMatch - свойство которое задает, должны ли совпадать параметры URL (Url Parameters) текущей страницы, с теми которые заданы в свойстве NavigationUrl, для того что бы считать страницу текущей.

IgnoreCase - свойство, которое задает, игнорировать регистр букв при сравнении URL текущей страницы с NavigationUrl, или учитывать.

DefaultPage - свойство, которое задает текущую дефолтную страницу (Default Page), если ссылка ведет не на файл, а на директорию с некой страницой по умолчанию, в ASP.NET обычно это 'default.aspx'

ForceSpan - всегда генерировать тэг SPAN, независимо от того, какая страница текущая.

ForceLink - всегда генерировать тэг A, независимо от того, какая страница текущая.

Установка и подключение к проекту

Скачайте и разархивируйте приложенный к заметке файл. Он содержит проект на C#, который компилируется в .dll содержащий нужный контрол.

Подключается контрол стандартным способом - можно включить проект в ваш Solution, добавить reference на проект и указать его в файле Web.Config:

   <add namespace="maqdev.Web.UI.WebControls" tagPrefix="maqdev" assembly="maqdev.MutableHyperLink"/>

После чего вы можете его добавить на свою страницу, например так:

   <maqdev:MutableHyperLink NavigateUrl="~/contact.aspx" Text="Contact" SpanCssClass="SelectedLink" runat="server" />

Скачать проект с контролом: maqdev.MutableHyperLink.zip


Комментарии

Добавить комментарий




  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading



maqdev.com

сообщения с ограниченным временем жизни