2010-02-02 49 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并检测其他属性。一旦他们解决了,做一个完整的重新编译。