2010-02-02 14 views
7

Ich habe masterpage.master.vb, wo ich Eigenschaften wie haben;Zugriff auf Masterpage-Eigenschaften von untergeordneten Seiten in ASP.net VB

Private _SQLerror As String 
    Public Property SQLerror() As String 
     Get 
      Return _SQLerror 
     End Get 
     Set(ByVal value As String) 
      _SQLerror = String.Empty 

     End Set 
    End Property 

Dann habe ich eine ASPX-Seite, in der ich diese Eigenschaft verwenden muss, wie z.

If **[masterpage property sqlerror]** = Nothing Then 
      InternalSQLErrLabel.Text = ("No Errors Reported") 
     End If 

Kann mir jemand eine Idee geben, wie man das macht? Ich habe versucht zu suchen, aber die meisten Artikel sprechen im Zusammenhang mit Web-Steuerelemente ...

Danke.

Antwort

7

Hier gehen Sie:

How to: Reference ASP.NET Master Page Content

Aus dem Artikel, es sieht aus wie

If Master.SQLerror = Nothing Then 
    InternalSQLErrLabel.Text = ("No Errors Reported") 
End If 

sollte für Sie arbeiten.

Stellen Sie sicher, dass Sie die MasterType-Direktive wie beschrieben hinzufügen oder dass ein Typkonvertierungsfehler auftritt. (Oder Sie könnten eine Variable Ihres Masterseitentyps anstelle von Master verwenden, wie daRoBBie in seiner Antwort vorschlägt.)

Ich habe eine Testwebsite erstellt, nur um dies zu testen, und es funktioniert. Hier ist die vollständige Quelle der Website:

Site1.Master:

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebApplication1.Site1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     This is the Master Page content. 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

Site1.Master.vb:

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

    Private _SQLerror As String 

    Public Property SQLerror() As String 
     Get 
      Return _SQLerror 
     End Get 
     Set(ByVal value As String) 
      _SQLerror = String.Empty 
     End Set 
    End Property 
End Class 

WebForm1.aspx:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" 
    CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> 

<%@ MasterType VirtualPath="~/Site1.Master" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    This is the Content Page content. 
    <asp:Label ID="InternalSQLErrLabel" runat="server" Text="Label"></asp:Label> 
</asp:Content> 

WebForm1.aspx.vb:

Public Partial Class WebForm1 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Master.SQLerror = Nothing Then 
      InternalSQLErrLabel.Text = ("No Errors Reported") 
     End If 
    End Sub 

End Class 

+0

Das war, was ich versuchte, bevor ich meine Frage stellte, aber ohne Glück! ... Ich bekomme; SQLError ist kein Mitglied von system.web.ui.masterpage. – Phil

+0

Haben Sie die MasterType-Anweisung hinzugefügt? Es sieht so aus, als ob das dein Problem sein könnte. Die Master-Eigenschaft ist nicht stark typisiert, also vom Typ System.Web.UI.MasterPage, der Ihre Eigenschaft nicht besitzt. –

+0

Ich habe <% @ MasterType VirtualPath = "~/mein.master" "%> und in @page MasterPageFile =" ~/mein.master " – Phil

3

Sie die Masterpage auf den richtigen Typ umwandeln kann:

:

MyMasterPageType m = (MyMasterPageType)Master; 

Dann Sie Ihre Eigenschaften zugreifen

m.SqlError 

Wenn Sie mehrere Masterseiten haben, lassen Sie alle Ihre Masterseiten von einer Schnittstelle erben und die Masterseite auf diese Schnittstelle umwandeln.

1

Sie können <% @ MasterType%> auch dafür verwenden.

0

Wenn Sie die Schritte in Andy West's Antwort gefolgt sind und einen oder mehrere Kompilierungsfehler haben, lesen Sie: Foo is not a member of 'System.Web.UI.MasterPage', stellen Sie sicher, dass sie der einzige Kompilierfehler in Ihrer Liste sind.Wenn weitere Kompilierungsfehler behoben werden müssen, sollten diese behoben werden, bevor Sie mit der Fehlerbehebung für MasterPage fortfahren.

Diese anderen Kompilierungsfehler verhindern möglicherweise, dass der Compiler Ihre MasterPage analysiert und die zusätzlichen Eigenschaften erkennt. Sobald sie aufgelöst sind, führen Sie eine vollständige Neukompilierung durch.

Verwandte Themen