Есть ли способ добавить событие onclick в серверный элемент управления ASP.NET Label?

Я хотел сделать что-то вроде этого:

<asp:Label ID="lblMyLabel" onclick="lblMyLabel_Click" runat="server">My Label</asp:Label>

Я знаю, что в Javascript я могу сделать:

<span onclick="foo();">My Label</span>

Поэтому мне интересно, почему я не могу сделать это с объектом Label.


person fuentesjr    schedule 08.10.2008    source источник


Ответы (10)


Вы можете использовать атрибуты для добавления обратного вызова на стороне клиента onclick.

Я не знал, что вы можете сделать это с тегами span, но если это сработает, вы можете добавить «onclick» с помощью lblMyLabel.Attributes.Add("onclick", "foo();");

Но foo(); должна быть функцией javascript на стороне клиента.

System.Web.UI.WebControls.Label НЕ имеет серверного события OnClick. Вы можете изучить использование AJAX, если вам нужен обратный вызов сервера с примером выше.

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

ASPX:

<asp:LinkButton ID="LinkButton1" runat="server" 
    CssClass="imjusttext" OnClick="LinkButton1_Click">
LinkButton
</asp:LinkButton>

CSS:

a.imjusttext{ color: #000000; text-decoration: none; }
a.imjusttext:hover { text-decoration: none; }
person Brian Kim    schedule 08.10.2008

В вашем вопросе не указано, хотите ли вы вызвать событие щелчка на сервере (VB или С#) или на клиенте (javascript). Если вы ищете событие на стороне сервера, вы должны использовать кнопку ссылки с css, которая делает ссылка появится в виде метки. Затем вы можете использовать событие щелчка кнопки ссылки на стороне сервера. Если вы ищете событие клика на стороне клиента, просто введите его в разметку вашего серверного элемента управления
asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NET выдаст дополнительные атрибуты в созданной разметке html.

person CodeChef    schedule 08.10.2008

Вы можете сделать это в коде в page_load, например:

void Page_Load(object sender, EventArgs e) 
{
      lblMyLabel.Attributes.Add("onclick",
           "javascript:alert('ALERT ALERT!!!')");
}
person JamesSugrue    schedule 08.10.2008

Если вам нужно событие onclick, почему бы вам не использовать кнопку ссылки, которая имеет событие onclientclick:

<asp:linkbutton id="lblMyLink" onclientclick="lblMyLink_Click" runat="server">My Label</asp:linkbutton>

Вы можете использовать CSS, чтобы ссылка выглядела так, как вы хотите.

person Glenn Slaven    schedule 08.10.2008
comment
Я не хотел, чтобы это выглядело как ссылка, и я не хотел, чтобы ссылка выглядела как обычный текст с помощью CSS, но я думаю, что это то, что я должен сделать. :( Спасибо хоть. - person fuentesjr; 08.10.2008

Я думаю, что вы можете, но это обработчик onclick на стороне клиента, а не на стороне сервера. Он будет жаловаться на то, что атрибут не поддерживается (или что-то в этом роде), но я думаю, что он отображается правильно. Если вы хотите использовать обработчик на стороне сервера, я думаю, вам нужно сделать LinkButton.

person tvanfosson    schedule 08.10.2008

Насколько я знаю, это невозможно. Элемент управления Label выдает элемент <span>, который «неактивен» на стороне сервера. Вам нужно будет заменить элемент управления Label на LinkButton.

person Pavel Chuchuva    schedule 08.10.2008

Другой лайфхак — использовать скрытую ссылку или кнопку со стилем = «display: none;» и активируйте щелчок на элементе управления сервером из функции javascript в диапазоне.

Что-то вроде этого:

<asp:linkbutton id="lblMyLink" onClick="lblMyLink_Click" runat="server" style="display:none;">My Link</asp:linkbutton>
<span onclick="document.getElementById('lblMyLink').click();">My Label</span>
person Eduardo Campañó    schedule 08.10.2008

вы всегда можете развернуть свой собственный элемент управления, который создает диапазон, со стандартным javascript обратной передачи .net, но, как указывалось ранее, использование метки ссылки с классом CSS было бы проще

person Stephen Wrighton    schedule 08.10.2008

Просто чтобы обсудить эту проблему, я использовал метку на своей странице .aspx, которая должна была быть видна в моем шаблоне элемента DataList только в том случае, если в наборе данных были дочерние записи.

Я добавил функцию onclick к ярлыку:

moreOptionsLabel.Attributes.Add("onclick", string.Format("toggle_visibility('{0}')", div.ClientID));

в моем файле .cs. Теперь он будет управлять тегом div на странице .aspx для отображения или скрытия записей, потому что onclick указывает на функцию javascript на стороне клиента. Обратите внимание на div.ClientID, который делает это возможным в списке данных.

Как отмечалось выше, тег span действительно становится функциональным с помощью «onclick». И поскольку элемент управления меткой отображается как диапазон после запроса страницы, использование Addtribute.Add("onclick".... действительно работает.

Результатом является отображение/скрытие данных без обратной передачи. Если вы используете LinkButton или аналогичные элементы управления - обратная передача и перезагрузка страницы неизбежны - если вы не хотите вникать в некоторые вещи Ajax.

ПРИМЕЧАНИЕ. Тег span не будет выглядеть интерактивным, если вы не настроите его с помощью подчеркивания и курсора в виде руки.

Авторство этой идеи принадлежит Уиллу Асрари по адресу http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx

person Doug    schedule 03.04.2009

Вам нужно создать объект класса, который наследуется от метки и обработчика событий onclick, который будет вашим методом и использовать ваш объект в качестве пользовательской метки.

person Community    schedule 09.09.2009