ASP.Net событие только поднимается через раз? - PullRequest
0 голосов
/ 09 марта 2010

У меня есть веб-пользовательский элемент управления ASP.Net, представляющий одну запись в списке. Чтобы позволить пользователям изменять порядок элементов, у каждого элемента есть кнопки для перемещения элемента вверх или вниз по списку. Нажатие на одну из них вызывает событие для родительской страницы, которое затем перетасовывает элементы в элементе управления заполнителем.

Фрагменты кода из записи списка:

Public Event UpClicked As System.EventHandler
Protected Sub btnUp_Click(ByVal sender As Object, ByVal e As System.EventArgs)
              Handles btnUp.Click
    RaiseEvent UpClicked(Me, New EventArgs())
End Sub

И родительский контейнер:

    rem (within the code to add an individual item to the placeholder)
    AddHandler l_oItem.UpClicked, AddressOf UpClicked


Protected Sub UpClicked(ByVal sender As Object, ByVal e As EventArgs)
    MoveItem(DirectCast(sender, ScriptListItem), -1)
End Sub

Изначально в тестировании выглядело так же, как и в любое другое время, когда значение отправителя (проверенное его свойствами), которое достигает UpClicked, относится к смежному ListItem, не тому, на которое я только что нажал - первый щелчок всегда неправильно, тогда второй для правильного управления.

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

Почему?

1 Ответ

0 голосов
/ 09 марта 2010

Для всплытия событий вы можете настроить пользовательский элемент управления на определение события:

public event SomeEventHandler UpClicked;

Который ссылается на это:

public class SomeEventArgs {
   public ListItem Selected { get; set; }
}
public delegate void SomeEventHandler(object sender, SomeEventArgs e);

Который вы можете хранить более одного свойства здесь; Вы можете хранить столько деталей, сколько захотите. Но вы можете использовать это событие arg для передачи всей информации на страницу ... это может быть связано с тем, как вы вызываете событие; убедитесь, что в вашем пользовательском контроле вы делаете что-то вроде:

public event SomeEventHandler UpClicked;

protected void OnUpClicked(SomeEventArgs e)
{
   if (UpClicked != null) UpClicked(this, e);
}

protected void button_click(object sender, EventArgs e)
{
    this.OnUpClicked(new SomeEventArgs { Selected = this.list.SelectedItem; });
}

НТН.

...