2014-11-05 63 views
0

美好的一天,将JavaScript注入到c代码后面的链接按钮中#

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

回答

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服务器端,除非abso强调必要的。我已经提供了一个适合问题背景的答案,但我会建议你在页面上已经有一个javascript函数,并将它连接到服务器端(如果没有用纯javascript把它绑定到客户端上)
  • 还有这里的前提是你将数据绑定到中继器(你应该这样),这意味着你还必须要连接的ItemDataBound处理程序:repCategories.OnItemDataBound += repCategories_ItemDataBound
+0

嗨DeeMac,由于用户需求,我不能将''链接改为'asp链接按钮'。此外,我的JavaScript实际上很长,'alert(hi)'只是演示示例。任何其他方式我可以在Literal元素上做什么? – 2014-11-05 10:23:30

+0

使用文字而不是链接按钮不会改变您的JavaScript的大小。你在服务器上处理一段冗长的javascript是一个问题。先将JavaScript获取到客户端,然后将其绑定到前端。 – 2014-11-05 10:28:05

相关问题