2015-04-07 15 views
6

Dire che ho gli elementi con gli ID di "Input1", "Input2" e "Input3".Possiamo fare riferimento dinamico all'elemento (Lato server)

C'è un modo per eseguire un ciclo attraverso di loro piuttosto che dover scrivere:

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

in jQuery si può semplicemente refrence un elemento come $ ('# Input' + i) e un ciclo tra i, qualcosa di simile sarebbe molto utile nel codice ASP dietro.

+2

probabilmente è necessario utilizzare il [ 'metodo Control.FindControl'] (https://msdn.microsoft.com/en-us/library/486wc64h (v = vs.110) aspx) – GolfWolf

+0

E ' sulle forme web? – adricadar

risposta

2

Edit: Duh, ho cercato ancora una volta per la ricerca di tutte le "x" controlli a pagina e si avvicinò con il seguente codice sorgente:

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

Kind of ..., sulla base di esempio schema di denominazione si può fare qualcosa di simile al seguente:

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

    } 

Questo vi permetterà di collegare attraverso controlli numericamente nome ma per il resto è un po 'goffo.

+0

Ok ho provato, ma l'oggetto di controllo non ha valore. Come faccio a lanciarlo o dire al codice che questo controllo * dovrebbe * essere un tipo di input e quindi ha una definizione di Valore? – colobusgem

+0

a seconda del tipo di input * potresti * dover eseguire il cast in questo modo: ((TextBox) myControl1) .Value – Pseudonym

1

Se si conosce il contenitore padre, è possibile eseguire il ciclo con la proprietà .Controls(). Se inizi a livello di pagina e lavori in modo ricorsivo, puoi finalmente raggiungere tutti i controlli sulla pagina.

Vedere la risposta dalla domanda this per ulteriori dettagli.

0

Mi piace mantenere le cose fortemente digitate, quindi le memorizzo in un elenco. Ciò rende il codice più resistente al refactoring e non è necessario eseguire il cast. Ci vuole un po 'più di lavoro in anticipo per mettere tutti i tuoi controlli nella lista, ma a me ne vale spesso la pena.

Non sono sicuro del tipo di controlli, quindi farò finta che siano di tipo Input.

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