2015-04-07 68 views
6

假設我有ID爲「Input1」,「Input2」和「Input3」的元素。我們可以動態引用元素(服務器端)

是否有通過他們的方式循環而不是有寫:

Input1.Value = 1; 
Input2.Value = 1; 
Input3.Value = 1; 

在jQuery中你可以通過我refrence如$一個元素(「#輸入」 + i)和環路,類似的東西在後面的ASP代碼中會非常有用。

+2

你可能需要使用['Control.FindControl'方法(https://msdn.microsoft.com/en-us/library/486wc64h(V = vs.110)的.aspx) – GolfWolf

+0

它關於webforms? – adricadar

回答

2

編輯:咄,我再次搜索查找所有的「X」控制頁面上,並與下面的源代碼上來:

foreach(Control c in Page.Controls) 
{ 
    if (c is TextBox) 
    { 
     // Do whatever you want to do with your textbox. 
    } 
} 

的......根據你的榜樣命名方案有種你可以做類似如下的事情:

private void Button1_Click(object sender, EventArgs MyEventArgs) 
    { 
      string controlName = TextBox 

      for(int i=1;i<4;i++) 
      { 
      // Find control on page. 
      Control myControl1 = FindControl(controlName+i); 
      if(myControl1!=null) 
      { 
       // Get control's parent. 
       Control myControl2 = myControl1.Parent; 
       Response.Write("Parent of the text box is : " + myControl2.ID); 
      } 
      else 
      { 
      Response.Write("Control not found"); 
      } 
     } 

    } 

這將讓你通過數字命名的控制循環,但否則它有點笨重。

+0

好吧,我試過,但控制對象沒有價值。我如何投它或告訴代碼,這個控件*應該*是一個輸入類型,因此有一個值定義? – colobusgem

+0

根據您的輸入類型,您*可能*必須將其轉換爲:((TextBox)myControl1).Value – Pseudonym

1

如果您知道父容器,則可以通過其.Controls()屬性進行循環。如果從頁面級開始並遞歸工作,則最終可以訪問頁面上的所有控件。

請參閱this問題的答案瞭解更多詳情。

0

我喜歡讓東西保持強類型,所以我將它們存儲在一個列表中。這使代碼對重構更有彈性,並且不需要投射。將所有控件放入列表需要稍微多一點的前期工作,但對我來說,這往往是值得的。

我不確定你的控件是什麼類型的,所以我會假裝它們的類型爲Input

var InputControls = new List<Input>(){Input1, Input2, Input3}; 
foreach(var input in InputControls) 
{ 
    input.Value = 1; 
} 
相關問題