1

イベントを正しくバブルするのに苦労しています。

ユーザーコントロールを備えたマスターページと、マスターページの子であるページがあります。

ユーザーコントロールとページは共通のデータを共有するため、ユーザーコントロールが更新されると、ページが更新され、その逆も同様です。

ユーザーコントロールは、イベントをマスターページに公開しました。これは私が使用する形式です。

クラス外:

public delegate void OfferBookmarkRemoved(int OfferID);

クラス内:

public event OfferBookmarkRemoved OfferBookmarkRemoved;

protected void LV_Bookmarks_ItemCommand(object source, ListViewCommandEventArgs e)
{
    if (e.CommandName == "RemoveOffer")
    {
        var offerId = (int)e.CommandArgument;

        OnOfferBookmarkRemoved(offerId);
    }

}

void OnOfferBookmarkRemoved(int offerId)
{
    offerId.ThrowDefault("offerId");

    if (OfferBookmarkRemoved != null)
    {
        OfferBookmarkRemoved(offerId);
    }
}

これで、マスターページで使用できます。マスターページでは何もしません。次のように、aspxページで使用できるようにイベントを公開します。

Master.OfferBookmarkRemoved += OnBookmarkRemoved;

void OnBookmarkRemoved(int offerId)
{
    offerId.ThrowDefault("offerId");

    OfferList1.UpdateBookmark(offerId);
}

したがって、不足しているのは、マスターでイベントをリッスンし、ページで使用できるようにすることです。

誰か助けてもらえますか?

4

1 に答える 1

3

このイベントは、マスターページでも次のように定義する必要があります。

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved
{
   add
   {
       userControl.OfferBookmarkRemoved += value;
   }
   remove
   {
       userControl.OfferBookmarkRemoved -= value;
   }
}

このようにして、masterイベントに登録するすべてのページがusercontrolイベントに登録されます。

ちなみに、あなたはイベントパターンに従っていません。イベントは次のようになります。

public class OfferEventArgs : EventArgs
{
   public int OfferID { get; set; }
}

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved;

呼び出されたとき:

OfferBookmarkRemoved(new OfferEventArgs() { OfferID = offerId });
于 2012-11-07T11:01:56.323 に答える