как вы получаете список флажков из кода asp.net позади? - PullRequest
1 голос
/ 07 октября 2009

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

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

любая помощь будет высоко ценится.

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

Ответы [ 2 ]

1 голос
/ 07 октября 2009

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

0 голосов
/ 08 октября 2009

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

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

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, но это станет дополнительным ударом по производительности и довольно уродливым решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...