Web用户控件上的NullReferenceException

时间:2010-10-28 01:01:28

标签: asp.net vb.net nullreferenceexception web-controls

第一次发帖。 :)

我是一个非常新的开发人员,所以我不太熟悉常见的ASP.NET问题。

作为测试,我的老板让我将一个(不是非常关键的)ASP.NET站点从1.1转换为4.0。嗯,这并不是非常困难,到目前为止事情进展顺利。但是,我遇到了一个小问题。运行此代码时,我不断收到NullReferenceException:

Public Property PageTitle() As String

    '===========================================================================
    'Exposes the PageTitle property of the child control.
    '===========================================================================
    Get
        Return lblPageTitle.Text
    End Get

    Set(ByVal Value As String)
        'TODO:  find out why this throws a NullReference exception
        lblPageTitle.Text = Value
    End Set

End Property

Value部分确实附加了一个字符串(字面意思:)但lblPageTitle只是不能正确设置。

更多背景如果有帮助:之前,这个Web用户控件在代码隐藏中有这些,但是他们开始抛出错误,因为它们已经被声明了。无论如何,这里是:

Public Shared lblPageTitle As New Label
Public Shared lblUser As New Label
Public Shared lblLastLogin As New Label
Public Shared lblToday As New Label
Public Shared lblSiteTitle As New Label

显然,New关键字可能在某种程度上帮助了这种情况,但其他标签都没有造成任何麻烦。

我已经尝试过这样做,但它不起作用:

    Dim PageTitle As New Label
    PageTitle = TryCast(ucPageHeader.FindControl("lblTitle"), Label)
    If Not IsNothing(PageTitle) Then
        PageTitle.Text = sb.ToString()
    End If

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您删除的那些声明是必需的。我有一种感觉,你正在使用一个Web应用程序项目,你的.designer.vb文件已经过时了。作为快速解决方案,在解决方案资源管理器中切换“显示所有文件”(只需在侧边栏的左上方放置一个小工具栏按钮),然后展开您正在处理的.ascx文件旁边的箭头。您应该看到.ascx.vb文件和.ascx.designer.vb文件。不需要太多细节,请尝试删除designer.vb文件,然后右键单击.ascx并选择“转换为Web应用程序”。 Visual Studio将重新创建您的.designer.vb,希望所有控件引用都完整无缺。

推荐阅读:Code-Behind with VS 2005 Web Application Projects。它适用于ASP.NET 2.0,但适用相同的基本原则。