从母版页访问标签控件会抛出nullreferenceexception

时间:2015-01-22 00:47:18

标签: vb.net visual-studio-2008

enter code here我正在尝试使用vb.net(不是我的第一语言 - lol)为主页面中的标签赋值。我已经从这两个参考资料中了解了如何从母版页访问内容: 1。[https://msdn.microsoft.com/en-us/library/c8y19k6h(v=vs.90).aspx][1] 2。[nullreferenceexception was unhandled by user code in Master Page

仅当我尝试从另一个类调用我为它创建的方法时,我才会获得Null引用异常。当我从方法所在的同一个类中调用它时,它工作正常。我从起始页/类中编写了一个方法,WebForm1:

Public Sub PageIdentity(ByVal pageId As String)  

    ' Gets a reference to a Label control inside a ContentPlaceHolder
    Dim mpContentPlaceHolder As ContentPlaceHolder

    'Dim mpTextBox As TextBox
    Dim mpLabel As Label

    mpContentPlaceHolder = CType(Master.FindControl("MainContent"), ContentPlaceHolder)*'Null Reference Exception here*

    If Not mpContentPlaceHolder Is Nothing Then

        mpLabel = CType(mpContentPlaceHolder.FindControl("lblPageIdentifier"), Label)

        If Not mpLabel Is Nothing Then

            mpLabel.Text = pageId

        End If
    End If

End Sub

当我在页面加载中从另一个类调用此函数时,它会抛出null ref ex:

 Dim oWebForm1 As WebForm1 = New WebForm1()
    oWebForm1.PageIdentity("SomeText")

我在创建实例时一定做错了吗?我首先尝试将其编写为公共共享功能,但这会产生其他问题。有人可以帮忙吗?

更新: @Joey我按照您的建议替换了下面注释的代码行,并将子代码放在母版页代码后面,Site1.Master.vb:

'mpContentPlaceHolder = CType(Master.FindControl("MainContent"), ContentPlaceHolder)
        mpContentPlaceHolder = CType(Me.FindControl("MainContent"), ContentPlaceHolder)

我还确保其他页面上的页面指令包括:

<%@ MasterType VirtualPath = "~/Site1.Master" %> 

在测试页面上,我像这样调用了sub:

Dim _SiteMaster As MasterPage = TryCast(Me.Master, MasterPage)
        _SiteMaster.PageIdentity("SomeText")

我收到蓝色波浪线错误,消息:"PageIdentity is not a member of System.Web.UI.MasterPage"

Master页面继承如下:

Public Partial Class Site1
    Inherits System.Web.UI.MasterPage

调用sub的页面继承了这个

Public Class WebForm1
    Inherits System.Web.UI.Page

1 个答案:

答案 0 :(得分:0)

由于您需要PageIdentity子程序有点全局,因此可以将其移动到母版页中。然后,可以通过引用它的任何页面调用母版页。在任何页面上使用以下代码来调用PageIdentity例程:

Dim _SiteMaster As Site1 = TryCast(Me.Master, Site1)
_SiteMaster.PageIdentity("SomeText")