从母版页访问标签控件抛出 nullreferenceexception
Access label control from masterpage throws nullreferenceexception
enter code here
我正在尝试使用 vb.net(不是我的母语 - 哈哈)为母版页中的标签分配一个值。我已经关注了这两个参考资料中关于如何从母版页访问内容的信息:
1.[https://msdn.microsoft.com/en-us/library/c8y19k6h(v=vs.90).aspx][1]
2.[nullreferenceexception was unhandled by user code in Master Page
只有当我尝试从另一个 class 调用我为它创建的方法时,才会出现空引用异常。当我从方法所在的同一个 class 调用它时,它工作正常。我从头开始写了一个方法 page/class,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
当我在页面加载中从另一个 class 调用此函数时,它会抛出 null ref ex:
Dim oWebForm1 As WebForm1 = New WebForm1()
oWebForm1.PageIdentity("SomeText")
我一定是在创建实例时做错了什么?我首先尝试将其编写为 Public 共享函数,但这会产生其他问题。有人可以帮忙吗?
更新: @Joey 我按照你的建议替换了下面注释的代码行,并将子代码放在母版页代码后面,Site1.Master.vb:
'mpContentPlaceHolder = CType(Master.FindControl("MainContent"), ContentPlaceHolder)
mpContentPlaceHolder = CType(Me.FindControl("MainContent"), ContentPlaceHolder)
我还确保其他页面上的页面指令包括:
<%@ MasterType VirtualPath = "~/Site1.Master" %>
在测试页面上,我这样调用了子程序:
Dim _SiteMaster As MasterPage = TryCast(Me.Master, MasterPage)
_SiteMaster.PageIdentity("SomeText")
我收到蓝色波浪线错误消息:"PageIdentity is not a member of System.Web.UI.MasterPage"
母版页继承如下:
Public Partial Class Site1
Inherits System.Web.UI.MasterPage
调用sub的页面是这样继承的
Public Class WebForm1
Inherits System.Web.UI.Page
由于您需要 PageIdentity
子例程具有一定的全局性,因此您可以将其移至母版页中。然后任何引用它的页面都可以调用母版页。在任何页面上使用以下代码调用 PageIdentity
例程:
Dim _SiteMaster As Site1 = TryCast(Me.Master, Site1)
_SiteMaster.PageIdentity("SomeText")
enter code here
我正在尝试使用 vb.net(不是我的母语 - 哈哈)为母版页中的标签分配一个值。我已经关注了这两个参考资料中关于如何从母版页访问内容的信息:
1.[https://msdn.microsoft.com/en-us/library/c8y19k6h(v=vs.90).aspx][1]
2.[nullreferenceexception was unhandled by user code in Master Page
只有当我尝试从另一个 class 调用我为它创建的方法时,才会出现空引用异常。当我从方法所在的同一个 class 调用它时,它工作正常。我从头开始写了一个方法 page/class,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
当我在页面加载中从另一个 class 调用此函数时,它会抛出 null ref ex:
Dim oWebForm1 As WebForm1 = New WebForm1()
oWebForm1.PageIdentity("SomeText")
我一定是在创建实例时做错了什么?我首先尝试将其编写为 Public 共享函数,但这会产生其他问题。有人可以帮忙吗?
更新: @Joey 我按照你的建议替换了下面注释的代码行,并将子代码放在母版页代码后面,Site1.Master.vb:
'mpContentPlaceHolder = CType(Master.FindControl("MainContent"), ContentPlaceHolder)
mpContentPlaceHolder = CType(Me.FindControl("MainContent"), ContentPlaceHolder)
我还确保其他页面上的页面指令包括:
<%@ MasterType VirtualPath = "~/Site1.Master" %>
在测试页面上,我这样调用了子程序:
Dim _SiteMaster As MasterPage = TryCast(Me.Master, MasterPage)
_SiteMaster.PageIdentity("SomeText")
我收到蓝色波浪线错误消息:"PageIdentity is not a member of System.Web.UI.MasterPage"
母版页继承如下:
Public Partial Class Site1
Inherits System.Web.UI.MasterPage
调用sub的页面是这样继承的
Public Class WebForm1
Inherits System.Web.UI.Page
由于您需要 PageIdentity
子例程具有一定的全局性,因此您可以将其移至母版页中。然后任何引用它的页面都可以调用母版页。在任何页面上使用以下代码调用 PageIdentity
例程:
Dim _SiteMaster As Site1 = TryCast(Me.Master, Site1)
_SiteMaster.PageIdentity("SomeText")