簡體   English   中英

事件處理程序始終為null

[英]Event Handler is Always null

我已經對此進行了廣泛的搜索,但找不到我的問題的解決方案。 我試圖在該頁面上的用戶控件的頁面后面的代碼中調用一個函數。

我有一個使用母版頁的Web應用程序。 我正在添加一個我寫入其中一個內容頁面的用戶控件。 我通過從工具箱中拖放來將用戶控件添加到aspx頁面。 我能夠從后面的代碼中看到用戶控件,但我無法訪問公共函數。 為了解決這個問題,我在后面的代碼中創建了一個用戶控件的對象,並使用了LoadControl函數。 所有這一切似乎都很好。

我遇到的問題是當我試圖從aspx頁面掛鈎到用戶控件的EventHandler時。 一切都編譯並運行得很好,但我沒有看到頁面上發生任何事情。 我認為問題是EventHandler始終為null。

用戶控制代碼

public partial class ucBuyerList : System.Web.UI.UserControl
{
    public delegate void BuyerSelectedEventHandler(object sender, EventArgs e);
    public event BuyerSelectedEventHandler BuyerSelected;

    private string name = "";
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    private string auid = "";
    public string AUID
    {
        get { return auid; }
        set { auid = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private void OnBuyerSelected(EventArgs e)
    {
        if (BuyerSelected != null)
        {
            BuyerSelected(this, new EventArgs());
        }
    }

    protected void lbBuyerList_SelectedIndexChanged(object sender, EventArgs e)
    {
        SetNameAndAUID();
        OnBuyerSelected(e);
    }

    private void SetNameAndAUID()
    {
        name = lbBuyerList.SelectedItem.Text;
        auid = lbBuyerList.SelectedItem.Value;
    }
}

父頁面代碼

    public partial class frmBuyerInformation : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Master.changePageTitle("Buyer Information");
        buyerList.BuyerSelected += new ucBuyerList.BuyerSelectedEventHandler(buyerListControl_BuyerSelected);
    }

    void buyerListControl_BuyerSelected(object sender, EventArgs e)
    {
        DisplayBuyerInformation();
    }

    public void DisplayBuyerInformation()
    {
        tbName.Text = buyerList.Name;
        tbAUID.Text = buyerList.AUID;
    }
}

誰能看到我做錯了什么?

編輯:此問題已得到解決。 上面的代碼snippits現在正在運行。 如果有人遇到我遇到的問題,你可以對上面的代碼進行建模。 確保aspx和ascx頁面中的AutoEventWireup="true" 感謝June Paik提供的解決方案。 感謝Diego De Vita的輸入。

我也一直在努力爭取事件。 如今我總是以這種方式創造它們,因為它是我知道它工作的唯一方式。 沒有使用您的代碼對其進行測試,但無論如何它仍在進行中:

public partial class ucBuyerList : System.Web.UI.UserControl
{
    public delegate void BuyerSelectedEventHandler(object sender, EventArgs e);

    public event BuyerSelectedEventHandler BuyerSelected;

    public string Name;
    public string AUID;

    protected void Page_Load(object sender, EventArgs e)
    {
        //Select the first buyer in the list when the user control loads

        if (!IsPostBack)
        {
            lbBuyerList.SelectedIndex = 0;
        }
    }

    private void OnBuyerSelected(EventArgs e)
    {
        BuyerSelectedEventHandler handler = BuyerSelected;
        if (handler != null)
        {
            handler(this, new EventArgs());
        }
    }

    protected void lbBuyerList_SelectedIndexChanged(object sender, EventArgs e)
    {
        Name = lbBuyerList.SelectedItem.Text;
        AUID = lbBuyerList.SelectedItem.Value;
        OnBuyerSelected(e);
    }
}

在父頁面中,您可以像調用函數一樣調用函數。

可能是Page_Load在頁面生命周期中為時太晚而無法使用LoadControl並訂閱該事件。 如果將該代碼移動到Page_Init方法會發生什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM