javascript - 从 C# 中的代码隐藏将 JavaScript 注入(inject)到链接按钮

标签 javascript c# html code-behind

美好的一天,

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

最佳答案

使用 LinkBut​​ton 并利用 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/

相关文章:

html - 如何在另一个背景图像上获取带有文本的div

php - HTML 和 PHP 之间的区别

javascript - 让按钮多次触发 onclick 事件

javascript - 无法在 Facebook 共享器上共享带有哈希值的链接

javascript - 如何将像这样交叉的 webGL Canvas 分成四等分?

c# - 启用 System.Timers.Timer 和 GarbageCollector

c# - 如何捕获鼠标移动 C# 窗体应用程序?

c# - 如何与另一个类的 Form 控件进行通信?

javascript - bootstrap slide + fancy box 解决方案

javascript - Jquery 拖动还原到特定的 div