美好的一天,
我有一个包含链接按钮的中继器。链接按钮的值和数量是根据从数据库中提取的数据生成的。 HTML 代码如下:
<asp:Repeater ID="repCategories" runat="server" EnableViewState="false">
<ItemTemplate>
<a href="<asp:Literal ID="litLink2" runat="server"></a>
</ItemTemplate>
</asp:Repeater>
这是我尝试在后面的代码中执行的一些代码,
for (int i = 0; i < table.Rows.Count; i++)
{
RepeaterItem itm = repCategories.Items[i];
GiftRow dr = tbl.GetRow(i);
Literal litLink2 = (Literal)itm.FindControl("litLink2");
litLink2.Text = dr.Name;
string myScript = string.Empty;
myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
myScript += "alert('hi');";
myScript += "\n\n </script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false);
}
通过这样做,当我加载页面时,我会收到警报hi
。我想要做的是,我只希望它在我点击时发出警报hi
链接按钮,而不是页面加载。
最佳答案
使用 LinkButton
并利用 ClientClick
事件:
<asp:Repeater ID="repCategories" runat="server" EnableViewState="false">
<ItemTemplate>
<asp:LinkButton ID="lbMyLinkButton" runat="server" />
</ItemTemplate>
</asp:Repeater>
我还建议您尽可能使用中继器的 ItemDataBound
事件:
void repCategories_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
((LinkButton)e.Item.FindControl("lbMyLinkButton")).OnClientClick = "alert('hi');";
}
}
注释:
- 除非绝对必要,否则我不会建议您在服务器端渲染 javascript。我已经提供了一个适合您问题上下文的答案,但我建议您页面上已有一个 javascript 函数,并在服务器端“连接它”(如果没有使用纯 javascript 将其绑定(bind)在客户端上)
- 这里还假设您将数据绑定(bind)到转发器(无论如何都应该这样做),这意味着您还必须连接
ItemDataBound
处理程序:repCategories.OnItemDataBound +=repCategories_ItemDataBound
关于javascript - 从 C# 中的代码隐藏将 JavaScript 注入(inject)到链接按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754321/