从c#中的代码后面向链接按钮注入JavaScript

本文关键字:链接 按钮 注入 JavaScript 代码 | 更新日期: 2023-09-27 18:29:08

你好,

我有一个中继器,包含链接按钮。链接按钮的值和编号是根据从数据库中提取的数据生成的。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,而不是页面加载。

从c#中的代码后面向链接按钮注入JavaScript

使用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将其绑定到客户端)
  • 这里还有一个假设,即您正在将数据绑定到中继器(无论如何都应该绑定),这意味着您还必须连接ItemDataBound处理程序:repCategories.OnItemDataBound += repCategories_ItemDataBound