[英]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.