Pull to refresh

asp.net: динамическое создание элементов управления

Reading time1 min
Views8K
Иногда приходится динамически создавать элементы управления. Для стандартных элементов все просто:
        Label testLabel = new Label()
        {
            Text = "TEST"
        };
        Page.Controls.Add(testLabel);


Данный код добавит элемент типа Label с текстом «TEST».
Для пользовательских элементов все немного сложнее, но тоже просто.

Во-первых, необходимо на странице, в которую будет добавляться контрол добавить reference (вместо register, который используется когда мы добавляем контрол во время дизайна):
<%@ Reference Control="~/ctrls/MyWebCtrl.ascx" %>


Комментарий: как справедливо заметил ostapbender, Reference необходимо объявлять когда используется модель проекта asp.net site, если вы используете asp.net web application, то такое объявление хоть и допустимо, но бесполезно потому-что в такой модели проекта изначально все части работают в одном пространстве имен и «знают» друг о друге.

Затем, для инстанцирования класса контрола в своей логике необходимо использовать LoadControl:
ctrls_MyWebCtrl ctrl = (ctrls_MyWebCtrl)LoadControl("~/ctrls/MyWebCtrl.ascx"); 


Теперь можно задать все свойства объекта или вызвать необходимые методы. Готовый контрол добавляют в контейнер ControlCollection на странице, обычно для этого используется стандартный элемент управления PlaceHolder.
PlaceHolder1.Controls.Add(ctrl); 


Одно замечание, рекомендуется при создании контрола указывать явно имя класса:
<%@ Control … ClassName="ctrls_MyWebCtrl" %>


Это значение будет использовано при динамическом создании контрола, в случае если оно не будет указано, значение сформируется из названия файла контрола.
Это все.
Tags:
Hubs:
+2
Comments4

Articles