2010-02-02 50 views
7

我有masterpage.master.vb我有屬性,如;從ASP.net中的子頁面訪問masterpage屬性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 

然後我有一個aspx頁面,我需要使用這個屬性,例如;

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

任何人都可以給我一個想法如何去做這件事嗎?我試過搜索,但大多數文章談論的網絡控制的背景下...

謝謝。

回答

7

在這裏你去:

How to: Reference ASP.NET Master Page Content

從文章,它看起來像

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

應該爲你工作。

只要確保按照所述添加了MasterType指令,或者您可能會遇到類型轉換錯誤。 (或者你可以使用你的母版頁類型,而不是法師的變量,如daRoBBie建議在他的回答。)

我創建了一個測試網站只是爲了測試這一點,和它的作品。下面是該網站的全部源:

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

這就是我之前試圖問我的問題,但沒有運氣! ...我得到; SQLError不是system.web.ui.masterpage的成員。 – Phil 2010-02-02 07:54:20

+0

您是否添加了MasterType指令?看起來這可能是你的問題。主屬性不是強類型的,所以它的類型是System.Web.UI.MasterPage,它沒有你的屬性。 – 2010-02-02 07:56:37

+0

我有<%@ MasterType VirtualPath =「〜/ my.master」「%>和 @page MasterPageFile =」〜/ my.master「 – Phil 2010-02-02 08:08:04

3

,就可以把母版爲正確的類型:

MyMasterPageType m = (MyMasterPageType)Master; 

然後你就可以訪問你的屬性:

m.SqlError 

如果您有多個主頁面,請讓所有主頁面從界面繼承,並將主頁面投射到該界面。

1

您也可以爲此使用<%@ MasterType%>。

0

如果您已按照Andy West的答案中的步驟操作,並且有一個或多個編譯錯誤:Foo is not a member of 'System.Web.UI.MasterPage',請確保它們是列表中唯一的編譯錯誤。如果還有其他編譯錯誤需要修復,則應在修復MasterPage之前對其進行修復。

這些其他編譯錯誤可能會阻止編譯器解析您的MasterPage並檢測其他屬性。一旦他們解決了,做一個完整的重新編譯。