You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET自定义LoginControl事件调用时触发未实例化对象错误求助

解决ASP.NET UserControl事件调用时的空引用异常

你遇到的这个“对象未实例化”错误,本质是事件对象为null时直接调用导致的空引用异常。你的UserControl代码里在触发ButtonLoginClick事件前没有做null检查,一旦页面上的事件处理程序没有正确绑定(或者绑定过程出了问题),调用事件就会抛出这个错误。

第一步:修正UserControl的事件触发代码

把你原来的btnLogin_Click1方法改成这样,先判断事件是否有订阅者再调用:

namespace WebApplication3 
{ 
    public partial class LoginControl : System.Web.UI.UserControl 
    { 
        public event EventHandler ButtonLoginClick; 

        protected void Page_Load(object sender, EventArgs e) { } 

        protected void btnLogin_Click1(object sender, EventArgs e) 
        { 
            // 先检查事件是否有订阅者,避免空引用
            ButtonLoginClick?.Invoke(sender, e);
            // 如果是旧版本C#不支持?.运算符,用下面的写法:
            // if (ButtonLoginClick != null)
            // {
            //     ButtonLoginClick(sender, e);
            // }
        } 
    } 
}

第二步:确认页面的事件绑定和处理方法正确

还要确保你的页面代码后置文件里存在btnLogin_Click方法,并且签名完全匹配EventHandler委托的要求:

protected void btnLogin_Click(object sender, EventArgs e)
{
    // 这里写你的登录逻辑,比如验证用户名密码等
}

另外检查页面上的控件声明,建议把控件ID和类名区分开,避免潜在的命名冲突:

<myComps:LoginControl runat="server" ID="LoginControl1" ButtonLoginClick="btnLogin_Click"></myComps:LoginControl>

为什么会出现这个问题?

在.NET中,事件本质是委托的集合,如果没有任何方法订阅这个事件,事件对象就是null。直接调用null的委托就会触发空引用异常。加上null检查后,只有当事件有订阅者时才会触发,避免了错误。

内容的提问来源于stack exchange,提问作者user1238784

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:05