2015-04-07 5 views
6

Sagen, ich habe die Elemente mit den IDs von "Input1", "Input2" und "Input3".Können wir dynamisch Referenzelement (Server Side)

Gibt es eine Möglichkeit, durch sie zu Schleife eher dann schreiben:

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

in jquery Sie können nur ein Element wie $ ('# Input' + i) und eine Schleife durch i refrence, etwas Ähnliches wäre sehr nützlich in ASP-Code hinter.

+2

Sie wahrscheinlich die [ 'Control.FindControl' Methode] verwenden müssen (https://msdn.microsoft.com/en-us/library/486wc64h (v = vs.110) .aspx) – GolfWolf

+0

es ist über Webformulare? – adricadar

Antwort

2

bearbeiten: Duh, ich für die Suche nach all wieder gesucht „x“ Kontrollen auf Seite und kam mit dem folgenden Quellcode auf:

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

Art ... basierend auf dem Beispiel-Schema zu benennen Sie tun so etwas wie die folgenden können:

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"); 
      } 
     } 

    } 

Dies wird Ihnen Schleife durch numerisch benannten Kontrollen lassen, aber ansonsten ist es etwas klobig.

+0

Ok, ich habe das versucht, aber das Control-Objekt hat keinen Wert. Wie kann ich es umwandeln oder dem Code mitteilen, dass dieses Steuerelement * ein Eingabetyp sein soll und daher eine Wertdefinition hat? – colobusgem

+0

abhängig von Ihrem Eingabe-Typ * müssen * Sie es vielleicht so werfen: ((TextBox) myControl1) .Value – Pseudonym

1

Wenn Sie den übergeordneten Container kennen, können Sie die Eigenschaft .Controls() durchlaufen. Wenn Sie auf Seitenebene beginnen und rekursiv arbeiten, können Sie schließlich alle Steuerelemente auf der Seite erreichen.

Siehe die Antwort von this Frage für weitere Details.

0

Ich mag es, Dinge stark typisiert zu halten, also speichere ich sie in einer Liste. Dies macht den Code resistenter für das Refactoring und es ist nicht notwendig, zu casten. Es erfordert ein wenig mehr Vorarbeit, um alle Ihre Kontrollen in die Liste zu setzen, aber für mich ist es oft es wert.

Ich bin mir nicht sicher, welchen Typ Ihre Steuerelemente sind, also tue ich so, als wären sie vom Typ Input.

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