2010-08-18 4 views
2

Мне нужно создать элемент управления .NET (в ASP.NET) из строки, представляющей имя элемента управления..NET Динамически получить контроль по имени

Control myList = SomeSystemClass.GetControlByName("DropDownList"); 

Я думаю, что есть некоторый метод отражения на платформе .NET, который позволяет это, но я понятия не имею, какой из них. Есть идеи?

+0

Вы не можете создать управления например, без «HttpContext». Было бы лучше объяснить ваш сценарий. –

+0

Также добавьте, если это пользовательский (серверный) элемент управления или пользовательский элемент управления. –

+0

Это серверный элемент управления ASP.NET. – asmo

ответ

1

Для управления сервера:

Control c = Page.ParseControl("<asp:DropDownList runat='server' />"); 

Или более конкретно для вашего примера:

string ctrlName = "DropDownList"; 
Control c = Page.ParseControl("<asp:" + ctrlName + " runat='server' />"); 

Для пользовательских элементов управления:

MyControl myControl1 = (MyControl)LoadControl("TempControl_Samples1.ascx"); 
1

Я думаю, вам нужно будет объединить одну из перегрузок Type.GetType() с помощью Activator.CreateInstance, чтобы создать фабричный метод, как вы описываете.

Соответствующие документы:

Редактировать Это только мне пришло в голову, что, если вы в состоянии использовать тип как показано в фрагменте кода, отражение должно быть абсолютно ненужным. Если у вас есть возможность объявить переменную как DropDownList, то гораздо проще просто включить = new DropDownList(); и назовите это хорошо.

Редактировать 2 На какой-то момент было сообщение, которое, возможно, правильно проинструктировало ваше намерение. Если вы ищете элемент управления, который уже существует, и у вас есть дескриптор его контейнера именования (который может быть страницей или может быть элементом управления привязкой к данным), вы можете получить элемент управления с помощью метода FindControl, затем приведение к соответствующему типу.

Соответствующие документы: http://msdn.microsoft.com/en-us/library/486wc64h.aspx

Смежные вопросы