32

我想做这样的事情:

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

我知道在 Javascript 中我可以做到:

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

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

4

10 回答 10

45

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

我不知道您可以在跨度标签上执行此操作,但如果它有效,您可以通过添加“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; }
于 2008-10-08T01:53:02.467 回答
11

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

于 2008-10-08T02:03:39.183 回答
5

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

void Page_Load(object sender, EventArgs e) 
{
      lblMyLabel.Attributes.Add("onclick",
           "javascript:alert('ALERT ALERT!!!')");
}
于 2008-10-08T01:55:06.440 回答
2

如果你想要一个 onclick 事件,为什么不使用一个链接按钮,它有onclientclick事件:

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

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

于 2008-10-08T01:57:05.593 回答
1

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

于 2008-10-08T01:55:08.187 回答
1

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

于 2008-10-08T01:55:33.990 回答
1

另一种技巧是使用带有 style="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>
于 2008-10-08T02:13:09.553 回答
0

您总是可以使用.net 的标准回发 javascript 推出自己的控件来生成跨度,但如前所述,使用带有 CSS 类的链接标签会更容易

于 2008-10-08T02:15:26.010 回答
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 或类似控件 - 回发和页面重新加载是不可避免的 - 除非您想了解一些 Ajax 内容。

注意:除非您使用下划线和手形光标对其进行样式设置,否则 span 标签看起来不可点击。

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

于 2009-04-03T17:54:34.487 回答
0

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

于 2009-09-09T06:29:16.473 回答