2014-11-05 41 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

相關問題