Иногда приходится динамически создавать элементы управления. Для стандартных элементов все просто:
Данный код добавит элемент типа Label с текстом «TEST».
Для пользовательских элементов все немного сложнее, но тоже просто.
Во-первых, необходимо на странице, в которую будет добавляться контрол добавить reference (вместо register, который используется когда мы добавляем контрол во время дизайна):
Затем, для инстанцирования класса контрола в своей логике необходимо использовать LoadControl:
Теперь можно задать все свойства объекта или вызвать необходимые методы. Готовый контрол добавляют в контейнер ControlCollection на странице, обычно для этого используется стандартный элемент управления PlaceHolder.
Одно замечание, рекомендуется при создании контрола указывать явно имя класса:
Это значение будет использовано при динамическом создании контрола, в случае если оно не будет указано, значение сформируется из названия файла контрола.
Это все.
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" %>
Это значение будет использовано при динамическом создании контрола, в случае если оно не будет указано, значение сформируется из названия файла контрола.
Это все.