Есть ли способ добавить событие onclick к серверному элементу управления Label ASP.NET? - PullRequest
26 голосов
/ 08 октября 2008

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

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

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

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

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

Ответы [ 10 ]

42 голосов
/ 08 октября 2008

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

Я не знал, что вы можете сделать это на тегах 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; }
11 голосов
/ 08 октября 2008

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

5 голосов
/ 08 октября 2008

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

void Page_Load(object sender, EventArgs e) 
{
      lblMyLabel.Attributes.Add("onclick",
           "javascript:alert('ALERT ALERT!!!')");
}
2 голосов
/ 08 октября 2008

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

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

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

1 голос
/ 08 октября 2008

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

1 голос
/ 08 октября 2008

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

0 голосов
/ 09 сентября 2009

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

0 голосов
/ 03 апреля 2009

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

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

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

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

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

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

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

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

0 голосов
/ 08 октября 2008

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

0 голосов
/ 08 октября 2008

Другим хаком будет использование скрытой ссылки или кнопки со стилем = "display: none;" и вызвать щелчок на элементе управления сервером из функции JavaScript в span.

Примерно так:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...