C# 事件不适用于用户控件
我有一个无法在项目的服务器端解决的问题 我会解释: 我有一个名为Global的页面,这是ASP.NET页面。 此页面使用名为CateGories的UserControl。 现在我在这个UC页面上有一个按钮,当我按下这个按钮时,我想在全局页面上调用一个与我的DB建立连接的函数 我决定使用代理(事件) 这是代码 全球网页: //在这里,我将我的函数添加到事件中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
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中存储熟食。像你那样在函数中启动它是最好的方法。