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

时间:2014-11-05 10:04:52

标签: 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,而不是页面加载。

1 个答案:

答案 0 :(得分:0)

使用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