2015-09-23 59 views
1

我正在更新一些循環訪問集合的舊代碼,並根據對象中的值設置一些UI顯示屬性。如何獲取HTML表格中的所有<asp:Label>控件?

不幸的是,它的硬編碼就像這樣:

for (int i = 0 ; i < length; i++) // length is going to be 30+ 
{ 
    // do some stuff 

    switch (i) 
    { 
     case 1: 
      lbl1.Text = myVariable; 
      break; 
     case 2: 
      lbl2.Text = myVariable; 
      break; 
     .... 
     case 15: 
      lbl15.Text = myVariable; 
      break; 
    } 
} 

(我說不幸,因爲它實際上具有每箱5條線,我離開了,它做同樣的事情,而不管的情況下)

現在,我可以將所有15 label控件放在一個數組中,並且在我的for循環中只需執行if (i <= 15) lblArr[i].Text = myVariable;,但我寧願不必對此數組進行硬編碼。如果我們添加更多標籤,那麼我們需要記住更新此功能。因此,我試圖找到一種方法來查找特定HTML元素中的所有控件,但是我找不到.NET語言中的一個工作示例。

在winforms中,我可以簡單地遍歷someControl.Controls並找到合適的,但由於這些是HTML表格中的標籤,而不是中繼器或類似的東西,所以我不知道如何找到它們。有任何想法嗎?

+0

只是好奇,如果*長度將是30 + *,爲什麼開關在15結束? – Amit

+0

你真的在使用普通的HTML表格,還是使用runat服務器的WebControl表格? – thewisegod

+0

@Amit我正在迭代的集合不僅僅是在頁面上設置一些值,而是前15個元素包含「額外」用戶定義字段的值 – sab669

回答

1

可以使用FindControl方法:

for (int i = 0 ; i < length; i++) 
{ 
    Label ans = FindControl(string.Format("lbl{0}",i)) as Label ; 
      if (ans!=null) and.Text = myVariable 

} 
+0

我剛剛離開工作,但我認爲這應該做我想要的;我認爲他們實際上都是「customlabel1,2,3」等等,這樣很容易。 – sab669

0

如何jQuery的?它的確比.NET快得多。給它一個鏡頭... :)

$(function() { 

    var myTableId = "yourTableId"; 
    var yourReplacementText = "yourReplacementText"; 
    var allSpansUnderYourTable = $('#' + myTableId).find('span'); 
    $.each(allSpan, function (index, item) { 
     item.innerHTML = yourReplacementText; 
    }); 
}); 
+0

然後,我需要一種方法來將頁面加載時獲取的DB值傳遞給此腳本 – sab669

+1

Jquery比.net更快.....有趣 –

0

根據代碼的複雜性,它可能是更清潔,只是在檢索頁面加載分貝排,將其設置爲在代碼隱藏屬性(或將其作爲頁面屬性的對象中的數據),然後使用代碼塊綁定到它。你也可以擺脫所有的<asp:Label>元素。

例如

<table> 
    <tr> 
    <td><span><%: myObject.Property1 %></span></td> 
    </tr> 
</table> 

這樣你就可以使所有的綁定聲明,並刪除程序代碼隱藏邏輯的需要循環和設置的東西。

相關問題