2010-11-29 7 views
7

Как загрузить пользовательский элемент управления динамически на странице?
У меня есть страница, содержащая radioButtons. Каждый щелчок на переключателе загружает пользовательский элемент управления (.ascx) на странице.
То, что я делаю, - это загрузка всех элементов управления одновременно, но для их видимости значение false. Когда пользователь щелкает радиокамеру, я устанавливаю видимость конкретного пользовательского элемента управления в значение true.
В результате я загружаю все пользовательские элементы управления при каждой обратной передаче.
Есть ли другой способ сделать это?Загрузка пользовательских элементов управления динамически

ответ

13

Добавить div с сервером runat на странице с идентификатором «divControls», например.

Asp позволяет вам динамически загружать пользовательский элемент управления «.ascx».

Код, указанный ниже, должен решить вашу проблему.

Control ctrl = Page.LoadControl("UserControlPath"); 
divControls.Controls.Clear(); 
divControls.Controls.Add(ctrl); 
0

Есть ли какие-либо конкретные причины, чтобы удерживать пользовательские элементы управления на одной странице?

Подумайте о состоянии просмотра страницы, когда вы загружаете все элементы управления и устанавливаете его видимость.

Я думаю, что есть два возможных решения:

  1. Либо создать seprate страницу хостинг другого пользовательского элемента управления, и когда пользователь нажимает на определенную кнопку радио, перенаправлять на соответствующую страницу.

  2. Загрузка по требованию, т. Е. Когда пользователь запрашивает пользовательский контроль, только затем загружает его, но удаляет все другие загруженные пользовательские элементы управления, и, следовательно, страница будет иметь только один пользовательский элемент управления в любое время.

1

Если вы не храните их в списке, а этот список в сеансе, у вас будет много проблем.

Путь Ghyath - это правильный путь, но вы также должны добавить их в список.

List<Object> Usercontrols = new List<Objects>{}; 
Control ctrl = Page.LoadControl("UserControlPath"); 
Usercontrols.Add(ctrl); 
Session["Usercontrols"] = Usercontrols; 

При каждом обратном вызове вам необходимо перезагрузить div с помощью элементов управления в вашем списке. Редактировать: Я исправил последнюю строку.