C# 事件不适用于用户控件

C# 事件不适用于用户控件,c#,asp.net,.net,events,delegates,C#,Asp.net,.net,Events,Delegates,我有一个无法在项目的服务器端解决的问题 我会解释: 我有一个名为Global的页面,这是ASP.NET页面。 此页面使用名为CateGories的UserControl。 现在我在这个UC页面上有一个按钮,当我按下这个按钮时,我想在全局页面上调用一个与我的DB建立连接的函数 我决定使用代理(事件) 这是代码 全球网页: //在这里,我将我的函数添加到事件中 protected void Page_Load(object sender, EventArgs e) { if

我有一个无法在项目的服务器端解决的问题

我会解释:

我有一个名为Global的页面,这是ASP.NET页面。 此页面使用名为CateGories的UserControl。 现在我在这个UC页面上有一个按钮,当我按下这个按钮时,我想在全局页面上调用一个与我的DB建立连接的函数

我决定使用代理(事件)

这是代码

全球网页:

//在这里,我将我的函数添加到事件中

protected  void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowCurrentTime.Text = DateTime.Now.ToString();
        }
        CateGories ClassCat = new CateGories();
        ClassCat.MainDel += PopulateLinks;
    }
public delegate void Click(string ButtonName);
public event Click MainDel = null;
//这是事件将运行的函数

 public void PopulateLinks(string CategoryName)
    {....}
UC页面代码(类别):

//活动代表团

protected  void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowCurrentTime.Text = DateTime.Now.ToString();
        }
        CateGories ClassCat = new CateGories();
        ClassCat.MainDel += PopulateLinks;
    }
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)

它不在函数中,因此go MainDel为null。 我看不出这里的问题,为什么在我将函数插入MainDel之后,它最终会变为null

如果有人能帮忙,我会很高兴的 谢谢
Max.

我想我以前在使用web应用程序时遇到过这个问题,就像使用windows应用程序一样


问题在于,当重新加载页面时,会创建页面类的新实例,因此上次服务器交互中的任何值都会丢失。

MainDel在我看来确实是空的

您正在Web窗体上创建一个类别实例,在用户控件上创建另一个类别实例。一旦你在UC上检查它是否为空,那么引用就指向了未初始化的对象

一种可能的方法是在PageLoad()之前以编程方式创建用户控件并将其添加到页面,并保留对该控件的引用,以便访问其属性

另一种解决方案是使用Page.FindControl查找UC并订阅事件


上面的方法名称可能不正确,很长时间没有使用web表单。

仍在查看此处,但不能错过
类别
。这是一种新的命名方式吗?这是一个错误的大写字母‘G’:)不用担心。它发生了。:)但是我找不到帮助你的方法。Np,我会等待,也许有人会发现问题,不管怎样,thanx。这是一个很好的理论,但我用类似的代码制作了其他程序,并且它工作了,所以我不明白为什么它在这里不工作。你能给我一个例子吗?我从来没有使用过viewstate,我想它就像一个缓存。你是对的!,事实上,引用是指向空的!我制作了一个函数来创建一个实例,并将所需的函数添加到事件中,然后调用该事件。很高兴听到你找到了答案。我四处搜索,似乎无法在viewstate中存储熟食。像你那样在函数中启动它是最好的方法。