.NET динамически получает контроль по имени - PullRequest
2 голосов
/ 18 августа 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 18 августа 2010

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

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 голос
/ 18 августа 2010

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

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

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

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

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

...