2015-04-07 4 views
6

Скажем, у меня есть элементы с идентификаторами «Input1», «Input2» и «Input3».Можем ли мы динамически ссылаться на элемент (сторона сервера)

Есть ли способ Переберите их, а затем, чтобы писать:

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

в JQuery вы можете просто refrence элемент как $ («# Input» + I) и цикл через I, что-то подобное было бы очень полезно в ASP-коде.

+2

вам, вероятно, нужно использовать [ 'метод Control.FindControl'] (https://msdn.microsoft.com/en-us/library/486wc64h (v = vs.110) .aspx) – GolfWolf

+0

это о веб-формах? – adricadar

ответ

2

Edit: Duh, я снова искал найти все «х» элементов управления на странице и придумал следующий исходный код:

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; 
} 
Смежные вопросы