web-dev-qa-db-fra.com

Existe-t-il un moyen d'ajouter un événement onclick à un contrôle serveur ASP.NET Label?

Je voulais faire quelque chose comme ça:

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

Je sais qu'en Javascript je peux faire:

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

Je me demande donc pourquoi je ne peux pas faire ça avec un objet Label.

26
fuentesjr

Vous pouvez utiliser des attributs pour ajouter un rappel côté client onclick.

Je ne savais pas que vous pouvez le faire sur des balises span, mais si cela fonctionne, vous pouvez ajouter 'onclick' par lblMyLabel.Attributes.Add("onclick", "foo();");

Mais foo(); devrait être une fonction javascript côté client.

System.Web.UI.WebControls.Label n'a PAS d'événement de serveur OnClick. Vous pouvez envisager d'utiliser AJAX si vous souhaitez un rappel du serveur avec l'exemple ci-dessus.

Vous pouvez également utiliser LinkButton comme d'autres disent. Vous pouvez faire en sorte qu'il ne ressemble pas à un lien en utilisant CSS, si c'est juste le soulignement qui vous préoccupe.

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; }
42
Brian Kim

Votre question ne spécifie pas si vous voulez déclencher l'événement click sur le serveur (VB ou c #) ou le client (javascript.) Si vous recherchez un événement côté serveur, vous devez utiliser un bouton de lien avec css qui fait le lien apparaît comme une étiquette. Vous pouvez ensuite utiliser l'événement de clic côté serveur du bouton de lien. Si vous recherchez un événement de clic côté client, saisissez-le simplement dans le balisage de contrôle de votre serveur
asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NET émettra des attributs supplémentaires dans le balisage html qui les génère.

11
CodeChef

Vous pouvez le faire en code dans la page_load par exemple:

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

Si vous voulez un événement onclick, pourquoi n'utilisez-vous pas un bouton de lien, qui a l'événement onclientclick:

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

Vous pouvez utiliser CSS pour que le lien ressemble à ce que vous voulez

2
Glenn Slaven

Je pense que vous pouvez, mais c'est un gestionnaire onclick côté client, pas côté serveur. Il se plaindra que l'attribut n'est pas pris en charge (ou certains autres), mais je pense qu'il s'affiche correctement. Si vous voulez un gestionnaire côté serveur, je pense que vous devrez faire un LinkButton.

1
tvanfosson

Pour autant que je sache, c'est impossible. Le contrôle d'étiquette émet <span> élément "non cliquable" côté serveur. Vous devez remplacer votre contrôle Label par un LinkButton.

1
Pavel Chuchuva

Un autre hack serait d'utiliser un lien ou un bouton caché avec style = "display: none;" et déclencher le clic sur le contrôle serveur à partir d'une fonction javascript dans l'intervalle.

Quelque chose comme ça:

<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>
1

Vous devez créer un objet de classe qui hérite du gestionnaire d'événements label et onclick qui sera une méthode de yourslef et utilisera votre objet comme une étiquette personnalisée.

0
Takele

vous pouvez toujours déployer votre propre contrôle qui produit une étendue, avec le javascript postback standard du .net, mais comme indiqué précédemment, l'utilisation d'un linklabel avec une classe CSS serait plus facile

0
Stephen Wrighton

Pour répondre à ce problème, j'ai utilisé une étiquette dans ma page .aspx qui ne devait être visible dans mon modèle d'élément DataList que s'il y avait des enregistrements enfants dans l'ensemble de données.

J'ai ajouté une fonction onclick à l'étiquette:

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

dans mon fichier .cs. Il contrôlera désormais une balise div dans la page .aspx pour afficher ou masquer les enregistrements - car le onclick pointe vers une fonction javascript côté client. Remarquez le div.ClientID, qui rend cela réalisable dans une base de données.

Comme indiqué ci-dessus - la balise span devient effectivement fonctionnelle avec "onclick". Et puisque le contrôle d'étiquette est rendu sous la forme d'une étendue après la demande de page, l'utilisation de Addtribute.Add ("onclick" .... fonctionne.

Le résultat est une fonctionnalité d'affichage/masquage des données sans faire de publication. Si vous utilisez le LinkButton, ou des contrôles similaires - la publication et le rechargement de page sont inévitables - à moins que vous ne vouliez entrer dans des trucs Ajax.

REMARQUE: la balise span ne sera pas cliquable sauf si vous la stylisez avec un soulignement et un curseur à la main.

Le mérite de cette idée vient de Will Asrari sur http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx

0
Doug