2015-01-28 5 views
0

Я разрабатываю пользовательский элемент управления (ascx), который загружает объекты LinkButton во время выполнения. Когда страница aspx загружается в Page_Load, источником данных для каждого LinkButton является запись словаря, например ((ferrari, 2), (chevrolet, 10), (джип, 6)), упорядоченной случайным образом. Когда пользователь щелкает LinkButton, чтобы делать PostBack, чтобы запросить базу данных с дополнительной информацией об элементе. Но когда исполнение достигает событие:ASP.NET LinkButton

protected void objHyperLink_Click (object sender, EventArgs e) 

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

Благодаря

+0

Если вы назначаете одно и то же событие всем кнопкам, «отправитель» должен быть тем, который инициировал событие. Вы можете передать его в 'LinkButton' через' DirectCast (отправитель As LinkButton) ', если вам нужно. –

+0

Вы должны создавать свои динамические элементы управления в событии 'PreInit', а не в событии' Load'. – Icemanind

+0

@ Cᴏʀʏ Не нужно для 'DirectCast()'. C# может просто использовать его с синтаксисом 'as'. Например, 'LinkButton btn = отправитель как LinkButton;' – mason

ответ

0

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

Icemanind предлагается переместить эту работу из Page_Load, что, вероятно, хорошая идея, но вам все равно понадобится такая же проверка IsPostBack.

public void Page_PreInit(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // create buttons 
    } 
} 

public void Page_Init(object sender, EventArgs e) 
{ 
    // The buttons exist, now assign events to them 
} 

Я хотел бы предложить чтение позорной статьи ASP.NET Page Life Cycle Overview MSDN, чтобы лучше понять, какие события страницы вы должны выполнять определенные действия.

Использование выдержки из статьи выше, вы можете понять, почему я использовал вышеуказанные методы:

  • PreInit: «Создание или повторное создание динамических элементов управления.»
  • Init: «Используйте это событие для чтения или инициализации свойств управления».

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

  • Нет связанных вопросов^_^