我对此进行了广泛搜索,但是找不到解决我问题的方法。我正在尝试从该页面上的用户控件在页面背后的代码中调用函数。
我有一个使用母版页的Web应用程序。我要添加一个我写到内容页面之一的用户控件。通过从工具箱中拖放用户控件,将其添加到aspx页面。我可以从后面的代码中看到用户控件,但是我无法访问公共(public)功能。为了解决该问题,我在后面的代码中创建了用户控件的对象,并使用了LoadControl函数。所有这些似乎都可以正常工作。
我遇到的问题是,当我尝试将ASP.NET页面中的EventHandler Hook 到用户控件时。一切都可以编译并正常运行,但是我看不到页面上发生任何事情。我认为问题在于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;
}
}
谁能看到我做错了吗?
编辑:此问题已解决。上面的代码片段现已正常运行。如果有人遇到我遇到的问题,则可以对上面的代码进行建模。确保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);
}
}
在父页面中,您可以仅使用已经执行过的方法来调用函数。
关于c# - 事件处理程序始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11729422/