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

时间:2008-10-08 01:45:21

标签: asp.net controls

我想做这样的事情:

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

我知道在Javascript中我能做到:

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

所以我想知道为什么我不能用Label对象做到这一点。

10 个答案:

答案 0 :(得分:42)

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

我不知道你可以在span标签上执行此操作,但如果它有效,你可以通过lblMyLabel.Attributes.Add("onclick", "foo();");添加'onclick'

但是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; }

答案 1 :(得分:11)

您的问题未指定是否要提升服务器(VB或c#)或客户端(javascript)上的click事件。如果您正在寻找服务器端事件,则应使用链接按钮css使链接显示为标签。然后,您可以使用链接按钮的服务器端单击事件。如果您正在寻找客户端点击事件 - 只需将其输入您的服务器控件标记中asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NET将在生成的html标记中发出其他属性。

答案 2 :(得分:5)

您可以在page_load中的代码中执行此操作,例如:

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

答案 3 :(得分:2)

如果您想要onclick事件,为什么不使用具有onclientclick事件的链接按钮:

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

您可以使用CSS使链接看起来像您想要的任何内容

答案 4 :(得分:1)

我认为你可以,但它是一个客户端onclick处理程序,而不是服务器端。它会抱怨该属性不受支持(或某些此类),但我认为它可以正确呈现。如果你想要服务器端处理程序,我认为你需要做一个LinkBut​​ton。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

另一个黑客是使用带有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>

答案 7 :(得分:0)

你总是可以使用.net的标准回发javascript推出你自己的控件,产生一个跨度,但如前所述使用带有CSS类的linklabel会更容易

答案 8 :(得分:0)

只是为了解决这个问题, 我在.aspx页面中使用了一个标签,如果数据集中有子记录,则只能在我的DataList Item模板中看到。

我在标签上添加了一个onclick函数:

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

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

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

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

注意:除非使用下划线和手形光标设置样式,否则span标记看起来不会是可点击的。

这个想法归功于Will Asrari在http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx

答案 9 :(得分:0)

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