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

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

Я просмотрел все и попробовал различные предложения, но я не могу заставить это работать, любая помощь будет принята с благодарностью.

Благодарность

Джоб Самуэль

1
user267815 6 Фев 2010 в 20:49

2 ответа

На самом деле ваша проблема не имеет ничего общего с UpdatePanel.

Представьте, что произойдет, если у вас будет 3-й LinkButton, который ничего не делает, кроме обратной передачи. Что произойдет, если вы нажмете 1-й LinkButton, появится UserControl, а затем вы нажмете 3-й? Что вы ожидаете увидеть? Если вы думаете, что снова увидите UserControl, вы ошибаетесь. Динамически создаваемые элементы управления должны создаваться при каждом запросе, они не сохраняются автоматически. ViewState запоминает состояние элементов управления на странице, а НЕ то, что сами элементы управления в первую очередь - это то, что делает разметка на странице aspx. Динамически созданные элементы управления явно отсутствуют в разметке, поэтому они не пересоздаются автоматически.

Вы должны думать о жизненном цикле элемента управления как о «между» между двумя запросами. Он начинается на полпути к одному запросу и заканчивается на полпути к следующему. Вам нужно сохранить, какой пользовательский элемент управления отображается в настоящее время либо в скрытом поле, либо в значении Page.ViewState (не в самом пользовательском элементе управления, заметьте, просто в любой информации, которая вам нужна, чтобы понять это), а затем перезагрузите этот элемент управления из OnLoad страницы. Если вы сделаете это -- последовательность будет выглядеть так:

(1) Нажмите LinkButton1 (2) Динамически созданный UserControl1 (3) Нажмите LinkButton2 (4) Page.OnLoad перезагрузит UserControl1 (5) UserControl1 загрузит свои данные обратной передачи и состояние просмотра (6) Сработает событие щелчка LinkButton2 (7) Удалить существующий UserControl1 и добавить UserControl2 динамически (8) UserControl2 может иметь тот же идентификатор, поскольку UserControl1 уже «использовал» его состояние.

Я предлагаю вам просмотреть мою серию статей о понимании динамических элементов управления в ASP.NET: http://weblogs.asp.net/infinitiesloop/

2
InfinitiesLoop 14 Фев 2010 в 20:18

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

0
Rick Rat 6 Фев 2010 в 23:09