事件无法使用用户控件

本文关键字:用户 控件 事件 | 更新日期: 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表单了。