Динамично зареждане на потребителски контроли

ASP.NET --- ASP.NET уебсайтове --- Динамично зареждане на потребителски контроли

Досега показахте как да добавите персонализирани контроли към страница, като регистрирате типа на персонализирания контрол и добавите подходящия манипулатор. Можете също така да създавате персонализирани контроли динамично - с други думи, да ги конструирате в движение с малко количество код на уеб страница.

Тази технология е подобна на техниката, използвана за динамично добавяне на редовни уеб контроли. Както при нормалните контроли, ще трябва да направите следното:

Добавете персонализирани контроли, когато се задейства събитието Page.Load (така че персонализираният контрол може правилно да възстанови състоянието си и да получава събития за обратно връщане).

Приложете контроли за контейнери и PlaceHolder, за да направите персонализираните контроли да се показват точно там, където искате.

Дайте на персонализирания контрол уникално име, като зададете неговото свойство ID. Тази информация може да се използва за получаване на връзка към контролата, използвайки метода Page.FindControl (), когато е необходимо.

Има обаче един допълнителен нюанс. Обект на персонализиран контрол не може да бъде създаден директно, както беше при обикновения контрол. Това е така, защото потребителските контроли не се създават само с код - те също се нуждаят от дескриптори, които са дефинирани във файла .ascx. За да си взаимодействате с ASP.NET персонализиран контрол, трябва да обработите този файл и да инициализирате подходящите обекти на детски контрол.

За това трябва да се извика методът Page.LoadControl (). Когато се извика методът LoadControl (), името на файла за маркиране .ascx на персонализираната контрола се предава. LoadControl () връща обект UserControl, който след това може да бъде добавен към страницата.

Следва пример за динамично зареждане на персонализиран контрол на TimeDisplay (създаден в предишната статия) и добавяне към страница с помощта на контролера PlaceHolder:

Въпреки това леко неудобство, динамичното зареждане на потребителски контроли е мощно. Обикновено се използва за създаване на конфигурируеми портални платформи.

Портални платформи

Докато изграждането на пълноценна портална платформа изисква много примерни кодове, можете да демонстрирате най-важните принципи с прост пример. Разгледайте страницата, показана на снимката по-долу. Включва панел, съдържащ три контроли - DropDownList (чието свойство AutoPostBack е зададено на true), Label и PlaceHolder:

динамично

Когато потребителят избере елемент от падащото меню, страницата изпраща данни обратно и съответният потребителски контрол се зарежда динамично и се вмъква в заместителя. Резултатът е показан на снимката по-долу.

Кодът, който зарежда избраната контрола, изглежда така:

Този пример има редица интересни функции. Тъй като PlaceHolder се съхранява във форматиран контейнер, заредените контроли автоматично ще наследят шрифта, цвета на фона и други свойства на контейнера (освен ако изрично не дефинират собствените си шрифтове и цветове).

Но най-важното е, че тъй като тези контроли се зареждат, когато се задейства събитието Page.Load, обектите за контрол могат да обработват собствените си събития. Можете да проверите това, като заредите персонализиран контрол на TimeDisplay и след това щракнете върху връзката, за да актуализирате стойността на времето.

Този пример може лесно да бъде разширен до напълно конфигурируема уеб страница. Всичко, което трябва да направите, е да създадете допълнителни панели и да ги организирате на уеб страница, може би като използвате таблици и други панели за групиране.