有没有办法将onclick事件添加到ASP.NET Label服务器控件?

问题描述:

我想要做这样的事情:有没有办法将onclick事件添加到ASP.NET Label服务器控件?

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

我知道在Javascript中我能做:

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

所以我不知道为什么我不能这样做与标签对象。

您可以使用属性添加onclick客户端回调。

我不知道,你可以在span标签做到这一点,但如果它的工作原理,你可以通过lblMyLabel.Attributes.Add("onclick", "foo();");

foo();添加的“onClick”将需要一个客户端的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; } 

你可以做到这一点在在Page_Load如代码:

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

我觉得还可以,但它是一个客户端 - 侧onclick处理程序,而不是服务器端。它会抱怨没有被支持的属性(或一些这样的),但我认为它正确渲染。如果你想要一个服务器端处理程序,我认为你需要做一个LinkBut​​ton。

据我所知,这是不可能的。标签控件在服务器端发出“不可点击”的元素<span>。您需要用LinkBut​​ton替换您的Label控件。

如果你想要一个onclick事件,你为什么不使用一个LinkBut​​ton,它具有onclientclick事件:

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

您可以使用CSS,使链接看起来像任何你想要

+1

我不希望它看起来像一个链接,我不想破解链接看起来像使用CSS的纯文本,但我想这就是我必须做的。 :(谢谢,虽然。 – fuentesjr 2008-10-08 02:03:23

你的问题并没有说明你是否想要在服务器(VB或c#)或客户端(javascript)上引发点击事件。如果你正在寻找一个服务器端事件,你应该使用一个带有CSS的链接按钮该链接显示为标签。然后,您可以使用链接按钮的服务器端单击事件。如果您正在查找客户端单击事件 - 只需将其键入到您的服务器控件标记中
asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NET将在生成的html标记中发出其他属性。

另一个黑客可能会使用隐藏的链接或按钮,其style =“display:none;”并从span中的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> 

你总是可以推出自己的控制其产生的跨度,与.NET的标准回传的JavaScript,但使用了CSS类的LinkLabel会更容易如前所述

只是在这个问题上, 我在.aspx页面中使用了一个标签,只有在DataList项目模板中可见时,如果数据集中存在子记录。

我加入的onclick函数到标签:

moreOptionsLabel.Attributes.Add( “点击”,的String.Format( “toggle_visibility( '{0}')”,div.ClientID));

在我的.cs文件中。它现在将控制.aspx页面中的div标记以显示或隐藏记录 - 因为onclick指向客户端JavaScript函数。注意div.ClientID,这使得这在datalist中可行。

如上所述 - 跨度标签确实通过“onclick”变成了功能。并且由于标签控件在页面请求后呈现为一个跨度,因此使用Addtribute.Add(“onclick”....确实有效。

结果是显示/隐藏数据的功能,无需执行回发。如果您使用LinkBut​​ton或simlar控件 - 回发和页面重新加载是不可避免的 - 除非您想进入一些Ajax内容

注意:span标记不会看起来可点击,除非您使用下划线手形光标。

感谢这个想法来自威尔Asrari了在http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx

呦你需要创建一个继承自标签和onclick事件处理程序的类对象,该处理程序将由yourslef作为一种方法,并将您的对象用作自定义标签。