【问题标题】:Access label control from masterpage throws nullreferenceexception来自母版页的访问标签控制引发 nullreferenceexception
【发布时间】:2015-01-23 02:23:59
【问题描述】:

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

只有当我尝试从另一个类调用我为它创建的方法时,我才会收到空引用异常。当我从该方法所在的同一个类中调用它时,它工作正常。我从起始页面/类 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"

母版页继承如下:

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

调用sub的页面这样继承

Public Class WebForm1
    Inherits System.Web.UI.Page

【问题讨论】:

  • 我对你的要求有点困惑。 PageIdentity 子位于名为WebForm1 的网络表单中,您正试图从另一个网络表单或类访问该子?如果是这种情况,我建议您将 PageIdentity 代码放入您的 Web 表单应该已经可以访问的母版页本身,然后以您需要的任何 Web 表单为您的母版页创建一个实例:Dim _siteMaster As MasterPage = TryCast(Me.Master, MasterPage) 和然后_siteMaster.PageIdentity("SomeText")。您还必须在子目录中将 Master 更改为 Me
  • @JoeyJoeJoeJrShabadoo 我在我原来的问题中更新了尝试你的建议的结果。现在我收到一个继承错误,不知道如何解决,因为据我所知,我的页面是正确继承的.....
  • 我的原始代码有点偏离,因为我不知道您的 MasterPage 类的名称。根据您更新的信息,我将更改为:Dim _SiteMaster As Site1 = TryCast(Me.Master, Site1)。这样,您将引用具有 PageIdentity 子而不是通用母版页类的母版页类
  • @JoeyJoeJoeJrShabadoo - 您的第二条评论中的代码更改起到了作用。我不知道如何将您的标记为答案...?谢谢你。对于其他寻找相关材料的人,我发现此链接也很有帮助:geekswithblogs.net/TakeNote/archive/2007/06/04/112966.aspx

标签: vb.net visual-studio-2008


【解决方案1】:

由于您要求PageIdentity 子例程具有某种程度的全局性,因此您可以将其移动到您的母版页中。然后,任何引用它的页面都可以调用母版页。在任意页面使用以下代码调用PageIdentity 例程:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多