Элементы управления ASP.NET добавлены динамически и не видны из кода - PullRequest
3 голосов
/ 07 июля 2010

Я добавляю динамически построенный набор флажков на страницу asp.net из кода с рекурсивным образом:

pnlPageAccessList.Controls.Add(myCheckboxControl);

Элементы управления отображаются на странице нормальноно они не отображаются при просмотре исходного кода, и я не могу получить к ним доступ из кода.Если я добавлю элементы управления в методе on_init, они будут работать.Но у меня есть некоторые бизнес-правила, которые приводят к изменениям самого списка элементов управления, которые требуют, чтобы я использовал метод add в другом месте.Кто-нибудь видел это раньше?Я не на работе, поэтому не могу скопировать точный код.

У меня есть две ужасные идеи о том, как заставить это работать.Один включает в себя несколько jQuery и набор скрытых элементов управления, содержащих большой массив целых чисел;другой - запустить метод on_init AND для других моих событий, чтобы, по крайней мере, отображались элементы управления.Оба пахнут как уродливые хаки.Второй, я подозреваю, не будет работать, чтобы прочитать значения из флажков.

Ответы [ 4 ]

4 голосов
/ 07 июля 2010

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

Поскольку вы добавляете элементы управления во время выполнения, они не известны во время компиляции, поэтому в объекте Page не объявлено никаких переменных для элементов управления. Если вы хотите получить доступ к элементам управления, вы должны либо оставить ссылку на них при создании элементов управления, либо найти их в коллекции элементов управления, в которую вы их поместили.

3 голосов
/ 07 июля 2010

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

1 голос
/ 07 июля 2010

@ Anero прав, что вы можете добавить идентификатор и использовать FindControl.

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

Вы не говорите, где метод должен быть запущен, но как только они добавлены динамически, их нужно добавитьна каждом постбеке.Вероятно, у вас есть немного больше гибкости, чем просто добавление их в событие Init, если вы будете в курсе, где происходят такие вещи, как проверка (если это имеет значение в этом случае) или где вы хотите обработать содержимое флажка.Вы можете отложить до PreRender для получения содержимого флажка.

0 голосов
/ 07 июля 2010

Ну, похоже, мне придется сделать это на стороне клиента.Спасибо за ответы.Я мог бы сделать это On_Init, но выполнение клиентской части со скрытым управлением сэкономит мне много времени и будет более гибким в дальнейшем.

Если кому-то интересно, вот jQuery для поиска всех отмеченных флажков и помещения их атрибута значения в скрытый элемент управления в списке с разделителями-запятыми:

<script type="text/javascript">
    $(document).ready(function () {
        $('[id*=PagesPanel]').find(':checkbox').click(function () {
            $('[id*=PagesPanel]').find(':checked').each(function () {
                $('[id*=lblHiddenPageArray]').append($(this).val() + ", ");
            });
        });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...