Я уже показывал, что во многих случаях . Сплошной drag'n'drop, настройка папаметров и "декларативное программирование", когда контролы напоминают шестеренки в механизме, а вы просто указываете, какая шестеренка и как зацепляет свою соседку. Однако зачастую этого недостаточно и контролы из того же Atlas Control Toolkit приходится добавлять динамически.
Простой пример -- корзина заказа. На странице выводится список предзаказанных товаров, происходит окончательная проверка, а затем -- непосредственно отправка заказа. Предположим, что мы хотим при отправке спросить, действительно ли клиент уверен, что все поля заполнены правильно. Естественным выбором, если вы используете Atlas, будет . Одна беда -- а что, если у нас в корзине нет товаров и, соответственно, отсутствует кнопка "заказать", к которой привязывается ? Он, конечно же, будет выдавать ошибку. Значит, нам придется проверять, есть ли в форме эта кнопка и динамически добавлять контрол. Беда только в том, что в документации примера нет, но ничего обойдемся.
Итак, есть кнопка btnOrder, расположенная внутри UpdatePanel upButton. И есть наш контрол ConfirmButtonExtender, который принимает 2 параметра: TargetControlID (ID кнопки, на которую вешаем подтверждение) и ConfirmText (вопрос, который мы задаем пользователю). Итак:
//создаем новый ConfirmButtonExtender
AtlasControlToolkit.ConfirmButtonExtender cbeOrderBtn = new AtlasControlToolkit.ConfirmButtonExtender();
//создаем настройки ConfirmButtonProperties
AtlasControlToolkit.ConfirmButtonProperties cbeProp = new AtlasControlToolkit.ConfirmButtonProperties();
//добавляем параметр ConfirmText
cbeProp.ConfirmText = "Заказ сформирован правильно?";
//добавляем параметр TargetControlId
cbeProp.TargetControlID = btnOrder.ID;
//сопоставляем наш ConfirmButtonExtender и его свойства
cbeOrderBtn.TargetProperties.Add(cbeProp);
//добавляем контрол в панель upButton
upButton.Controls.Add(cbeOrderBtn);
Ну вот и все =)
Спасибо за науку!