2015-04-07 14 views
6

Powiedz, że mam elementy z identyfikatorami "Input1", "Input2" i "Input3".Czy możemy dynamicznie odwoływać się do elementu (po stronie serwera)?

Czy istnieje sposób pętli przez nich, a następnie konieczności pisania:

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

w jQuery można po prostu Referencje element jak $ („# input” + I) oraz pętlę przez I coś podobnego byłby bardzo użyteczny w kodzie ASP.

+2

prawdopodobnie trzeba użyć metody Control.FindControl' [ '] (https://msdn.microsoft.com/en-us/library/486wc64h (v = vs.110) .aspx) – GolfWolf

+0

to o formularzach internetowych? – adricadar

Odpowiedz

2

Edit: Duh, szukałem ponownie za znalezienie wszystkich „x” kontrole na stronie i podszedł z następującego kodu źródłowego:

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

Kind of ... w oparciu o przykład schematu nazewnictwa ty może zrobić coś takiego:

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

    } 

Umożliwi to zapętlenie kontrolek sterowanych numerycznie, ale w przeciwnym razie jest nieco niezgrabny.

+0

OK próbowałem, ale obiekt kontrolny nie ma wartości. Jak mogę go rzucić lub powiedzieć, że ten element sterujący * powinien * być typem wejściowym i dlatego ma definicję wartości? – colobusgem

+0

w zależności od wprowadzonego typu * musisz * przesłać go tak: ((TextBox) myControl1) .Value – Pseudonym

1

Jeśli znasz kontener nadrzędny, możesz użyć pętli za pomocą właściwości .Controls(). Jeśli zaczniesz na poziomie strony i będziesz pracować rekursywnie, możesz w końcu dotrzeć do wszystkich elementów sterujących na stronie.

Aby uzyskać więcej informacji, zobacz odpowiedź z pytania this.

0

Lubię trzymać rzeczy mocno wpisane, więc przechowuję je na liście. To sprawia, że ​​kod jest bardziej odporny na refaktoryzację i nie ma potrzeby rzucania. Trochę więcej wstępnej pracy wymaga umieszczenia wszystkich elementów sterujących na liście, ale dla mnie często jest to warte zachodu.

Nie jestem pewien, jaki typ mają twoje elementy sterujące, więc zamierzam udawać, że są typu Input.

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