2013-07-11 4 views
2

У меня есть LinkButton, который создается динамически в Load, а затем добавляется в элемент управления, который находится на странице Master. Вот исходный код, используемый для создания LinkButton:Невозможно щелкнуть событие при динамическом добавлении LinkButton

LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false }; 
LockUnlock.Click += LockUnlock_Click; 

Теперь, когда я первый копал в эту проблему, я думал, что это может быть связано с жизненным циклом ASP.NET, так что я переехал код на override OnInit, но это не исправить.

Затем я перешел к настройке ID, потому что это не делается. Поэтому я добавил эту строку:

LockUnlock.ID = "LockUnlock"; 

, и я пытался, что в обоих OnInit и Load - не повезло.

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

LockUnlock.ClientIDMode = ClientIDMode.Static; 

Я только пробовал это в Load, но не повезло, и, честно говоря, если он не работает в Load, он почти наверняка ничего не изменит в OnInit - это был только мой первый шаг и действительно град Мэри во многих отношениях.

Хорошо, так что теперь я в точке, где я чувствую, что это связано с тем, что ResourceCenter является то, что добавляется к ContentPlaceHolder и, таким образом события пользовательского элемента управления, хотя это технически зацепили, может не запускается из-за контекста class. Но я не уверен, куда идти отсюда.

Нужно ли добавить общий класс для клика? Нужно ли мне подключать клик в пользовательском элементе управления, а потом делегировать его оттуда?

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

EDIT

код, который добавляет элемент управления в ResourceCenter выглядит следующим образом:

this.ResourceCenter.AddAdminLink(LockUnlock.Visible ? LockUnlock : null); 

и код внутри ResourceCenter управления, который добавляет в свой список выглядит следующим образом:

if (link == null) { return; } 

var wrapper = new HtmlGenericControl("li"); 
wrapper.Controls.Add(link); 

this.AdminLinkList.Controls.Add(wrapper); 

, где link - это то, что было передано в метод указанной выше строкой.

+0

Можете ли вы поделиться кодом, который добавляет элемент управления на страницу? – Andrei

+0

@ Андреа, см. Мое редактирование. –

+0

В каком событии page_load вы добавляете главную страницу управления или страницу контента? –

ответ

2

Это должно быть в init. Кроме того, перед добавлением события попробуйте добавить элемент управления в коллекцию управления, как в:

LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false }; 
Panel.Controls.Add(LockUnlock); 
LockUnlock.Click += LockUnlock_Click; 
Смежные вопросы