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

从ASCX用户控件调用另一控件属性时出现Null引用异常

问题分析与解决:ASCX控件调用属性时的“对象引用未设置”异常

问题根源

你在Page_Load中直接通过New GridTableUserControl()创建控件实例,这种方式没有让控件进入ASP.NET的页面生命周期流程,导致控件内部的服务器控件(hf_MaxPocketNumber这个HiddenField)未被正确初始化,处于null状态。当你访问它的Value属性时,自然会抛出「对象引用未设置到对象实例」异常。

解决方案

1. 使用页面上已声明的控件实例

如果GridTableUserControl已经在当前ASCX的页面标记中声明(比如<uc1:GridTableUserControl ID="pocketControl" runat="server" />),直接使用这个已声明的实例:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim abc As Integer = pocketControl.Max_Pocket_Value_
End Sub

2. 动态加载控件并加入控件树

如果需要动态创建控件,必须用LoadControl方法加载,并且将其添加到页面的某个容器控件(比如Panel)中,确保生命周期正常执行:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim pocketControl As GridTableUserControl = CType(LoadControl("~/Path/To/GridTableUserControl.ascx"), GridTableUserControl)
    YourPanel.Controls.Add(pocketControl) ' 替换成你页面上的容器控件ID
    Dim abc As Integer = pocketControl.Max_Pocket_Value_
End Sub

3. 防御性代码优化

另外,在控件的属性Max_Pocket_Value_中,可以添加对hf_MaxPocketNumber的null检查,避免异常:

Public Property Max_Pocket_Value_() As Integer
    Get
        Dim MAXIMUM_VALUE As Integer = -1 ' 默认值
        Try
            If Me.hf_MaxPocketNumber IsNot Nothing Then
                Integer.TryParse(Me.hf_MaxPocketNumber.Value, MAXIMUM_VALUE)
                If MAXIMUM_VALUE < 0 Then
                    MAXIMUM_VALUE = -1
                End If
            End If
        Catch ex As Exception
            ' Web环境不要用MsgBox,改用日志或前端提示
            System.Web.HttpContext.Current.Trace.Warn("Max_Pocket_Value_异常", ex.Message)
            ' 或者用ScriptManager弹出前端提示
            ' ScriptManager.RegisterStartupScript(Me, Me.GetType(), "ErrorMsg", "alert('加载失败:" & ex.Message.Replace("'", "\'") & "');", True)
        End Try
        Return MAXIMUM_VALUE
    End Get
    Set(max_Pocket_Number As Integer)
        If Me.hf_MaxPocketNumber IsNot Nothing Then
            hf_MaxPocketNumber.Value = max_Pocket_Number.ToString()
        End If
    End Set
End Property

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:40:19