2009-02-16 2 views
0

Я создаю servercontrol для ASP.Net. За то короткое и точное я просто перечислить вещи я делаю:ASP.NET EventHandling

(1) Вызов EnsureChildControls в OnInit

(2) Создание динамической таблицы в CreateChildControls:

Table aTable = new Table(); 
aTable.ID = this.ID + "$" + T; 
TableRow aRow = new TableRow(); 
aRow.ID = aTable.ID + "$R" + <COUNTER>.ToString(); 
TableCell aCell = new TableCell(); 

createLinkButton(row, col, caption, aCell, aRow.ID); 

this.Controls.Add(aTable); 

(3) Have функция, как:

void aLinkButton_Command(object sender, CommandEventArgs e) 
{ 
    // Some stuff 
    return; 
} 

(4) есть функции, как:

void createLinkButton(int row, int col, string caption, TableCell aCell, string baseID) { 
    LinkButton lb = new LinkButton(); 
    lb.ID = baseID + "$" + row.ToString() + col.ToString(); 
    lb.Command += new CommandEventHandler(aLinkButton_Command); 
    lb.Text = caption; 
    lb.CommandName = "<command>"; 
    aCell.Controls.Add(lb); 
    return; 
} 

Но: Событие никогда не называется. Href исправляется для обратной передачи, но проводное событие никогда не запускается.

Нет идей больше :(

Любые идеи

ответ

1

Вам нужно будет воссоздать динамически созданный LinkButton на Postback, чтобы связать его с EventHander. Rath чем объяснить все это, я настоятельно рекомендую вам прочитать classic article Скотта Митчелла по этому вопросу.

+0

Hi, Я переработал OnInit и назвал EnsureChildControls. Это должно гарантировать, что элементы управления будут воссозданы при обратной передаче, не так ли? Sascha – Sascha

+0

Нет ... Я не верю, что это должно гарантировать это. – Cerebrus

+0

Насколько я понимаю, EnsureChildControls определяет, содержит ли элемент управления childcontrols, если он не создаст их. Как бы вы гарантировали создание, если не используете эту функцию? – Sascha

0

Вы добавляете вам таблицы в серверный элемент управления .Controls коллекции, например

this.Controls.Add(aTable); 

Не похож он из вашего образца кода , так что я ожидаю, что это может быть проблемой.

+0

Привет, Я опускаю этот вызов, но в конце CreateChildcontrols он добавляется в коллекцию элементов управления. Sascha – Sascha

0

Я думаю, что реализация IPostBackEventHandler interface может помочь.

В вашем случае вы можете реализовать интерфейс, а в RisePostBackEvent вы можете вызвать метод обработчика событий.

Надеюсь, это поможет!

+0

Hi, no. вообще не называется. Это не простой контроль, а что-то связанное с другим другим asp.сетевые элементы управления динамически вместе. Таким образом, IPostBackEventHandler, похоже, не подходит здесь. – Sascha

0

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

+0

Контроллер сервера жестко связан через тег в коде asp.net. Поэтому он должен быть добавлен в дерево управления для обоих типов запросов. – Sascha