C # & AJAX - добавляет элементы управления динамически, но не может найти их при обратной передаче - PullRequest
0 голосов
/ 18 мая 2010

Это действительно должно быть намного проще, поэтому я, должно быть, упускаю что-то очевидное. У меня есть C # ASP.NET страница с поддержкой AJAX. У меня также есть панель ASP.NET, которая изначально пуста, но я создаю пару раскрывающихся списков и добавляю их в код. Эта часть работает просто отлично. Однако, когда страница выполняет обратную передачу, элементы управления «исчезают», и я не могу их найти вообще. Обратите внимание, что сама панель не находится в панели обновления AJAX, я упоминаю об этом только потому, что думаю, что это может быть проблема с состоянием просмотра.

Этот код работает просто отлично:

DropDownList newList = new DropDownList();
newList.ID = string.Format("lst{0}", opt.OptionName.ToString());

foreach (SaleItemOptions myOpt in opt.OptionsInList)
   {
newList.Items.Add(myOpt.OptionName);
    }

this.pnlOptions.Controls.Add(newList);

Но этот код всегда возвращает NULL

DropDownList myList = (DropDownList)this.pnlOptions.FindControl("lstSize");

Я подтвердил, что имя элемента управления существует в форме, и я также использовал такие варианты, как ControlID, ID и т. Д.

Кроме того, во всем этом есть один смягчающий фактор. Я использую GCheckout API (Google Checkout для ASP.NET) для создания обратной передачи. Это действительно не должно быть проблемой, но я подумал, что упомяну это

Ответы [ 2 ]

3 голосов
/ 18 мая 2010

Вы снова добавляете элементы управления на страницу после обратной передачи? Вам нужно сделать это, чтобы восстановить их значения, если их нет, их не существует. Если вы добавите их снова, вы можете получить их отправленные обратно значения. Лучшее место для этого - переопределить метод init для страницы, чтобы ваши динамически добавленные элементы управления создавались одновременно с тем, как asp.net создает элементы управления в разметке.

0 голосов
/ 18 мая 2010

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

...