0

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

我会解释:

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

我决定使用代表(事件)

这是代码。

全局页面:

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

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页面代码(CateGories):

//事件委托

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 后,它最终会变为空...

如果有人可以提供帮助,我会很高兴谢谢。最大限度。

4

2 回答 2

0

我想我以前遇到过这个问题,当我以 Windows 应用程序的方式使用 Web 应用程序时。

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

于 2013-07-24T12:42:45.783 回答
0

就我所见,MainDel 确实为空。

您正在 Web 窗体上创建一个 CateGories 实例,并在用户控件上创建另一个实例。一旦您在 UC 上检查它是否为空,则该引用将指向未初始化的对象。

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

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

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

于 2013-07-24T12:44:47.427 回答