2009-10-07 1 views
1

Я уверен, что это простая проблема, но я не могу придумать способ (кроме использования javascript для принудительной обратной передачи), чтобы получить список флажков в коде asp.net.Как вы получаете список флажков из кода asp.net?

каждый флажок находится в отдельном пользовательском элементе управления, поэтому я не могу использовать checkboxlist.

любая помощь будет очень признательна.

Заранее спасибо

+0

Не могли бы вы это немного разъяснить? В каком смысле они являются «списком» флажков, если каждый находится в отдельном настраиваемом элементе управления? –

+0

Являются ли эти WebControls или HTML-элементы управления? –

+0

, потому что есть несколько таких пользовательских элементов управления. и я хочу прокрутить их, чтобы увидеть, какие из них будут нажаты после нажатия кнопки. – ErnieStings

ответ

1

Если у вас есть UserControl с N количеством флажков, необходимо выставить общественную собственность, проведение сбора идентификаторов, контролирует ... независимо от того, что вы должны иметь доступ к от родителей контейнер.

+0

+1 - согласовал, изменил интерфейс настраиваемого элемента управления, чтобы либо показать идентификатор флажка, либо сам флажок, либо состояние, в котором установлен флажок. Проверено представляет. –

+0

Вы можете просто сделать foreach в коллекции элементов управления UserControl, итерации и проверки флажков с помощью is. –

0

можно рекурсивно пройти через иерархию управления на странице и просто получить элементы управления, которые являются CheckBoxes

В вашей странице вы можете объявить элемент, который будет использоваться для хранения флажков:

private List<CheckBox> checkBoxes = new List<CheckBox>(); 

Используя рекурсивный метод, вы можете пересечь структуру элементов управления:

public void TraverseHierarchy(ControlCollection controls) 
{ 
    foreach (Control c in controls) 
    { 
     CheckBox checkBox = c as CheckBox; 
     if (checkBox != null) 
     { 
      checkBoxes.Add(checkBox); 
     } 
     if (c.Controls.Count > 0) 
     { 
      TraverseHierarchy(c.Controls); 
     } 
    } 
} 

А вы можете назвать это, предоставляя коллекцию элементов управления страницы:

TraverseHierarchy(Page.Controls); 

Однако проблема с вышеуказанным кодом заключается в том, что существуют определенные элементы управления, которые наследуются от элемента управления CheckBox. Например, как RadioButton. Таким образом, контроль будет также соответствовать присутствующим в вашей коллекции, поскольку действителен as.

Что вы можете сделать, это либо сделать дополнительную фильтрацию на основе определенного свойства ваших флажков. Например, если ваше ID именования соответствуют по вашим флажкам вы также можете проверить, что свойство ID начинается с определенным префиксом:

public void TraverseHierarchy(ControlCollection controls) 
{ 
    foreach (Control c in controls) 
    { 
     CheckBox checkBox = c as CheckBox; 
     if (checkBox != null) 
     { 
      if (checkBox.ID.StartsWith("cb")) 
      { 
       checkBoxes.Add(checkBox); 
      } 
     } 
     if (c.Controls.Count > 0) 
     { 
      TraverseHierarchy(c.Controls); 
     } 
    } 
} 

Или вы могли бы устранить элементы управления, которые расширяют CheckBox с помощью is оператора но это будет быть дополнительным ударом по производительности и довольно уродливым решением.

Смежные вопросы