2015-06-17 70 views
2

我有一箇中繼器,並且裏面有一個imagebutton。當用戶點擊一個圖像按鈕時,我會改變邊框顏色,但我正在尋找 解決方案來解決上一個問題。如何分配diffrerent id到中繼器的項目,以檢測點擊的ImageButton

我所做的就是將被點擊的人的ID更改爲OLDID,然後當用戶下一次點擊另一個圖像按鈕時,找到之前點擊的人(OLDID),然後忽略它。 問題是在頁面中找到OLDID,因爲它在一箇中繼器裏面,我不能寫OLDID.ID = xxx,也就是e.Item.FindControl(「OLDID」);不起作用。

我搜索了很多,但找不到解決方案,有這樣的問題,但仍然沒有答案。 任何建議將不勝感激。

<asp:Repeater ID="rptrPlatforms" runat="server" OnItemDataBound="rptrPlatforms_ItemDataBound" OnItemCommand="rptrPlatforms_ItemCommand"> 
    <ItemTemplate> 
     <div style="border: 4px solid green; height: 250px; width: 330px;" runat="server"> 
      <asp:ImageButton ID="imgPlatform" alt="" Style="border: 4px solid; height: 240px; width: 320px;" runat="server" OnCommand="Platform_Click" CommandName="PlatformClick" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"PlatformLanguageID")+","+DataBinder.Eval(Container.DataItem,"PlatformID") %>' /> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

後面的代碼:

protected void rptrPlatforms_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     ImageButton Oldimg = (ImageButton)e.Item.FindControl("OLDID"); 
     if (Oldimg != null) 
     { 
      Oldimg.Attributes.CssStyle.Add("border-color", "#000000"); 
      Oldimg.ID = "imgPlatform"; 
     } 
     ImageButton img = (ImageButton)e.CommandSource; 
     img.Attributes.CssStyle.Add("border-color", "#00FFFF"); 
     img.Attributes.CssStyle.Add("border-width", "8px"); 
     img.Attributes.CssStyle.Add("border-style", "solid"); 
     img.ID = "OLDID"; 
    } 
+0

你是否必須在你的代碼中實現這個邏輯? JavaScript或jQuery怎麼樣? –

+0

感謝Hanlet考慮這個問題。是的,我喜歡在代碼背後做,現在通過J.F. –

+0

的解決方案解決了它=)我很高興你找到了解決方案。 –

回答

1

您可以在點擊的ImageButton的行索引存儲在您的網頁上隱藏字段。既然你只持有一個單一的價值,那麼根本就沒有任何開銷。

<asp:HiddenField ID="hiddenSelectedIBRowIndex" runat="server" /> 
<asp:Repeater ID="rptrPlatforms" runat="server" 
    OnItemDataBound="rptrPlatforms_ItemDataBound" 
    OnItemCommand="rptrPlatforms_ItemCommand"> 

然後將HiddenField的值設置爲圖像按鈕的行索引。如果HiddenField有一個值,找到該索引的行並設置其邊框顏色。

protected void rptrPlatforms_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    // If there is a value for the hidden field, we know there 
    // is an ImageButton that needs to be changed 
    if(hiddenSelectedIBRowIndex.Value.length > 0) 
    { 
     // Find the image button and set the border color 
     int rowIndex = int.Parse(hiddenSelectedIBRowIndex.Value); 
     RepeaterItem item = rptrPlatforms.Items[rowIndex]; 
     ImageButton ib = (ImageButton)item.FindControl("imgPlatform"); 
     ib.Attributes.CssStyle.Add("border-color", "#000000"); 
    } 

    ImageButton img = (ImageButton)e.CommandSource; 
    img.Attributes.CssStyle.Add("border-color", "#00FFFF"); 
    img.Attributes.CssStyle.Add("border-width", "8px"); 
    img.Attributes.CssStyle.Add("border-style", "solid"); 

    // Set the value to the newly selected row 
    hiddenSelectedIBRowIndex.Value = e.Item.ItemIndex; 
} 
+0

:)我真的很喜歡你的快速和準確的答案。很好地回答了我的問題。 –

+0

很高興聽到它! –

相關問題