事件无法使用用户控件
本文关键字:用户 控件 事件 | 更新日期: 2023-09-27 18:24:45
我在项目的服务器端遇到了一个无法解决的问题。
我来解释一下:
我有一个名为Global的页面,这是ASP.NET页面。此页面使用名为CateGories的UserControl。现在我在UC页面上有一个按钮,当我按下时,我想调用Global页面上的一个函数,该函数与我的DB建立连接。
我决定使用代表(活动)
这就是代码。
全球页面:
//在这里,我将我的功能添加到事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowCurrentTime.Text = DateTime.Now.ToString();
}
CateGories ClassCat = new CateGories();
ClassCat.MainDel += PopulateLinks;
}
//这是事件将运行的功能
public void PopulateLinks(string CategoryName)
{....}
UC页面代码(类别):
//活动委托
public delegate void Click(string ButtonName);
public event Click MainDel = null;
//当我点击按钮时调用的函数
protected void News_Click(object sender, EventArgs e)
{
if (MainDel != null)
{
MainDel(News.Text);
}
}
现在一切都应该正常工作,但当编译器到达if(MainDel!=null)
…
它没有进入函数,MainDel为空。我看不出这里的问题,为什么在我向MainDel插入函数后,它最终会变为null。。。
如果有人能帮忙,我会很高兴的谢谢最大
我想我以前在使用web应用程序时遇到过这个问题,就像使用windows应用程序一样。
问题在于,当页面被重新加载时,会创建页面类的一个新实例,因此上一次服务器交互中的任何值都会丢失。
MainDel在我看来确实为null。
您正在Web窗体上创建CateGories的一个实例,在用户控件上创建另一个实例。一旦你在UC上检查它是否为null,引用就是对未初始化对象的引用。
一种可能的方法是在PageLoad()之前以程序方式创建用户控件并将其添加到页面中,并保留对它的引用,以便您可以访问它的属性。
另一种解决方案可能是使用Page.FindControl来查找UC并订阅事件。
上面的方法名称可能不正确,已经很长时间没有使用web表单了。