2012-09-08 3 views
0

Я пытаюсь добавить MyWUCtr.ascx каждый раз, когда на страницу ASP.Net нажата кнопка.Добавить динамический контроль пользователя в ASP.Net

Page Код нагрузки:

if (!Page.IsPostBack) 
      { 
       Session["ctrid"] = "0"; 
      } 
      if (Session["myctrs"] != null) 
      { 
       Panel1.Controls.Clear(); 
       Panel p = ((Panel)Session["myctrs"]); 
       foreach (Control c in p.Controls) 
       { 
        if (c is UserControl) 
         Panel1.Controls.Add(c); 
       } 
      } 

Кнопка Нажмите Код:

int x = Convert.ToInt32(Session["ctrid"].ToString()); 

MyWUCtr ctr = LoadControl("~/MyWUCtr.ascx") as MyWUCtr; 
ctr.ID = "myctr" + x.ToString(); 

x++; 
Panel1.Controls.Add(ctr); 
Session["myctrs"] = Panel1; 
Session["ctrid"] = x.ToString(); 

Этот элемент управления имеет только один текстовое поле и кнопку.

+1

В чем Ваш вопрос? – nunespascal

ответ

0

Ваш вопрос не дает понять, в чем проблема, с которой вы столкнулись.

Однако, если вы динамически добавляете элементы управления в обработчики событий, вам нужно будет повторно создавать и повторно добавлять их в том же порядке и с тем же идентификатором каждый раз, когда загружается страница. Это потребует от вас отслеживания в любом месте, например в ViewState, количества элементов управления, которые вы добавили, и (если это может измениться), в которые вы их поместили.

ViewState может восстановить свое состояние, но они должны уже существовать в дереве управления страницей, чтобы это произошло. Следовательно, необходимо воссоздать их. Предоставленные Microsoft элементы управления, такие как GridView, делают это внутренне (именно поэтому, даже если вы не повторно привязываете их, они поднимают события DataItemCreated), но если вы создаете и добавляете их в реакцию на событие, вы ответственных за воссоздание их после обратной передачи.

Следует иметь в виду, что единственными элементами управления, которые автоматически создаются при загрузке страницы, являются те, которые объявлены как разметка. Все остальное, нужно добавлять каждый раз.

+0

Я хочу добавить свой webusercontrol.ascx в событие нажатия кнопки. Для этого я использую следующий код: <жерех: Button ID = "Button2" RUNAT = "сервер" OnClick = "Button2_Click" Text = "Кнопка" />
<жерех: Панель ID = "Panel1" Runat = "server"> и при нажатии кнопки UserControl ctr = (UserControl) LoadControl («MyWUCtr.ascx»); Panel1.Controls.Add (ctr); –

+0

@vishnusaini Но что не так? Что происходит, что вы не хотите, чтобы произойти, или не случилось, что вы хотите? Если это связано с тем, что добавленные элементы управления не сохраняются между postbacks, это почти наверняка по той причине, о которой я упоминал: если вы хотите, чтобы элементы управления отображались, они должны быть восстановлены каждый раз, когда у вас есть сообщение назад. –

+0

Я не могу добавить элемент управления каждый раз при нажатии кнопки. –

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