【发布时间】:2010-09-15 22:00:03
【问题描述】:
我想做这样的事情:
<asp:Label ID="lblMyLabel" onclick="lblMyLabel_Click" runat="server">My Label</asp:Label>
我知道在 Javascript 中我可以做到:
<span onclick="foo();">My Label</span>
所以我想知道为什么我不能用 Label 对象做到这一点。
【问题讨论】:
我想做这样的事情:
<asp:Label ID="lblMyLabel" onclick="lblMyLabel_Click" runat="server">My Label</asp:Label>
我知道在 Javascript 中我可以做到:
<span onclick="foo();">My Label</span>
所以我想知道为什么我不能用 Label 对象做到这一点。
【问题讨论】:
您可以使用属性添加 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; }
【讨论】:
您的问题没有说明您是要在服务器(VB 或 c#)还是客户端(javascript)上引发点击事件。如果您正在寻找服务器端事件,您应该使用链接按钮使链接显示为标签的 css。然后,您可以使用链接按钮的服务器端单击事件。如果您正在寻找客户端点击事件 - 只需将其输入到您的服务器控件标记中asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NET 将在生成的 html 标记中发出其他属性。
【讨论】:
您可以在 page_load 中的代码中执行此操作,例如:
void Page_Load(object sender, EventArgs e)
{
lblMyLabel.Attributes.Add("onclick",
"javascript:alert('ALERT ALERT!!!')");
}
【讨论】:
如果你想要一个 onclick 事件,为什么不使用一个链接按钮,它有 onclientclick 事件:
<asp:linkbutton id="lblMyLink" onclientclick="lblMyLink_Click" runat="server">My Label</asp:linkbutton>
你可以使用 CSS 让链接看起来像你想要的任何东西
【讨论】:
我认为你可以,但它是客户端的 onclick 处理程序,而不是服务器端。它会抱怨该属性不受支持(或某些此类),但我认为它可以正确呈现。如果你想要一个服务器端处理程序,我认为你需要做一个 LinkButton。
【讨论】:
据我所知,这是不可能的。标签控件发出<span> 元素,该元素在服务器端是“不可点击的”。您需要将 Label 控件替换为 LinkButton。
【讨论】:
另一个技巧是使用 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 类的链接标签会更容易
【讨论】:
只是在这个问题上插话, 我在 .aspx 页面中使用了一个标签,如果数据集中有子记录,该标签仅在我的 DataList 项模板中可见。
我给标签添加了一个onclick函数:
moreOptionsLabel.Attributes.Add("onclick", string.Format("toggle_visibility('{0}')", div.ClientID));
在我的 .cs 文件中。它现在将控制 .aspx 页面中的 div 标记来显示或隐藏记录 - 因为 onclick 指向客户端 JavaScript 函数。请注意 div.ClientID,这使得它可以在数据列表中使用。
如上所述 - span 标签确实可以通过“onclick”来发挥作用。并且由于标签控件在页面请求之后呈现为跨度,因此使用 Addtribute.Add("onclick".... 确实有效。
结果是无需回发即可显示/隐藏数据功能。如果您使用 LinkButton 或类似控件 - 回发和页面重新加载是不可避免的 - 除非您想了解一些 Ajax 内容。
注意:除非您使用下划线和手形光标对其进行样式设置,否则 span 标签看起来不可点击。
这个想法的功劳来自 Will Asrari,http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx
【讨论】:
您需要创建一个继承自标签和 onclick 事件处理程序的类对象,这将是您自己的方法并将您的对象用作自定义标签。
【讨论】: