2015-01-22 3 views
0

enter code here Я пытаюсь присвоить значение меток на главной странице с помощью vb.net (а не моего первого языка-lol). Я следовал за информацию из этих двух ссылок о том, как получить доступ к контенту из Masterpage: 1. [https://msdn.microsoft.com/en-us/library/c8y19k6h(v=vs.90).aspx][1] 2. [nullreferenceexception was unhandled by user code in Master PageУправление меткой доступа от masterpage throws nullreferenceexception

Я получаю Null Reference Exception на НО ТОЛЬКО при попытке вызвать метод, который я создал для него из другого класса. Он отлично работает, когда я называю это из того же класса метод находится в я написал метод от начальной страницы/класса, 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") 

Должно быть, что-то не так, создавая экземпляр? Сначала я попытался написать его как публичную общую функцию, но это создало другие проблемы. Может ли кто-нибудь помочь?

UPDATE: @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 

страница вызова подменит наследованные как этот

Public Class WebForm1 
    Inherits System.Web.UI.Page 
+0

Я немного смущен тем, что вы просите. Подраздел 'PageIdentity' находится в веб-форме, называемой' WebForm1', и вы пытаетесь получить доступ к этому югу из другой веб-формы или класса? Если это так, я бы порекомендовал вам поместить код 'PageIdentity' в главную страницу, которая уже должна быть доступна вашей веб-формой, а затем создать экземпляр на главной странице в любой веб-форме, в которой вы нуждаетесь:' Dim _siteMaster As MasterPage = TryCast (Me.Master, MasterPage) ', а затем' _siteMaster.PageIdentity («SomeText») '. Вам также пришлось бы изменить «Мастер» на «Я» в подпункте. –

+0

Дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

@JoeyJoeJoeJrShabadoo Я ОБНОВЛЯЮ в своем первоначальном вопросе с результатами попыток вашего предложения. Теперь я получаю ошибку наследования, не знаю, как исправить, поскольку моя страница наследует правильно, насколько я могу судить ..... – Doreen

ответ

0

Поскольку вам требуется подпрограмма PageIdentity будет несколько глобальной, вы можете перенести ее на свою главную страницу. Затем мастер-страницу может быть вызвана любой ссылкой на нее. Используйте следующий код на любой странице для вызова процедуры PageIdentity:

Dim _SiteMaster As Site1 = TryCast(Me.Master, Site1) 
_SiteMaster.PageIdentity("SomeText") 
Смежные вопросы