0

リスト内の単一のエントリを表す ASP.Net Web ユーザー コントロールがあります。ユーザーがアイテムを並べ替えられるように、各アイテムにはリスト内でアイテムを上下に移動するためのボタンがあります。これらのいずれかをクリックすると、親ページにイベントが発生し、プレースホルダー コントロール内のアイテムがシャッフルされます。

リスト エントリのコード フラグメント:

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 回おきに無視されていることが示されているようです。コントロール内のクリック イベントのブレークポイントはヒットしていませんが、イベントは確実に確立されています。

なんで?

4

1 に答える 1

0

イベントをバブルアップするには、ユーザー コントロールにイベントを定義させることができます。

public event SomeEventHandler UpClicked;

これを参照するもの:

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

ここに複数のプロパティを保存できます。好きなだけ詳細を保存できます。ただし、このイベント引数を使用してすべての情報をページに渡すことができます...イベントの呼び出し方法が問題になる可能性があります。ユーザーコントロールで次のようなことを確認してください。

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; });
}

HTH。

于 2010-03-09T13:17:59.230 に答える