2010-06-09 27 views
1

結構:中繼如何找到一個標籤在ASP轉發我的ASP的

repeater 
    updatePanel 
     label1 (rating) 
     button (updates rating) 
     some_picture (thing being rated) 
    /update panel 
/repeater 

想象含有100行以上中繼器的輸出。 (每行1個標籤和1個按鈕)。

目標:當我點擊按鈕時,我想要更新適當的標籤。我不知道如何做到這一點。 我可以通過引用標籤:

Label myLabel2Update = (Label)Repeater1.Controls[0].Controls[0].FindControl("Label1"); 

但ofcourse,這將是每次(不一定是標籤需要更新)相同的標籤。我需要更新與按鈕位於同一行的標籤。

任何指導,將不勝感激。

+0

儘量避免1行更新面板,如果你打算有100行......這是一個矯枉過正的!也許我對你的控制體系不太瞭解 – 2010-06-09 18:29:34

回答

3

處理中繼器的ItemCommand事件。在你的事件處理程序中檢查事件參數的Item屬性,並在其上使用findcontrol。例如

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    Label Label1 = (Label)e.Item.FindControl("Label1"); 
} 

Label1將成爲與被點擊的按鈕相同的項目中的標籤。

或響應威利博士的學徒的評論,你可以做以下

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    switch (e.CommandName) 
    { 
     case "bClick": 
      Label Label1 = (Label)e.Item.FindControl("Label1"); 
      /*do whatever processing here*/ 
      break;    
    } 
} 

然後爲每個按鈕指定命令名「B單擊」

+0

如果我沒有弄錯,你需要確保Button控件爲CommandName屬性指定一個值,以便觸發這個ItemCommand事件。此外,在ItemCommand事件處理程序中,您可能需要檢查事件參數的CommandName屬性,以確保您處理的是您認爲自己的事件,以防萬一現在或將來有可能出現其他按鈕或導致ItemCommand事件使用不同的CommandName觸發的鏈接。不過,這是一個很好的方法。 – 2010-06-09 19:18:10

+0

您應該向按鈕添加一個命令名稱,以確保您正在處理正確的命令,但是會觸發一個ItemCommand事件,並且您可以在不提供命令名稱的情況下處理它,但您無法確定該命令是否正確正在處理正確的事情。我會編輯我的答案。 – 2010-06-09 19:29:17

0

您需要一個輔助方法遍歷層次結構,或使用 控件的FindControl(string id)方法。

實施例:

var stateLabel = (Label)e.Row.FindControl("_courseStateLabel"); 
0

我想有該按鈕的事件處理程序?如果是這樣,你應該可以做

protected virtual void OnClick(object sender, EventArgs e) 
{ 
    var label = ((WebControl)clickedButton).Parent.FindControl("Label1"); 
}