gpt4 book ai didi

c# - 事件处理程序始终为空

转载 作者:太空狗 更新时间:2023-10-29 21:51:16 25 4
gpt4 key购买 nike

我对此进行了广泛的搜索,但找不到解决我的问题的方法。我正在尝试从该页面上的用户控件调用该页面代码隐藏中的函数。

我有一个使用母版页的网络应用程序。我正在添加我写入其中一个内容页面的用户控件。我通过从工具箱中拖放用户控件来将它添加到 aspx 页面。我可以从后面的代码中看到用户控件,但我无法访问公共(public)功能。为了解决这个问题,我在后面的代码中创建了一个用户控件对象,并使用了 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;
}
}

谁能看出我做错了什么?

编辑:这个问题已经解决。上面的代码片段现在可以使用了。如果有人遇到我遇到的问题,您可以对上面的代码进行建模。确保 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# - 事件处理程序始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com