从ASP.net VB中的子页面访问母版页属性

时间:2010-02-02 07:35:32

标签: asp.net vb.net properties master-pages

我有masterpage.master.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

有谁能告诉我如何解决这个问题?我尝试过搜索,但大多数文章都是在网页控件的背景下进行讨论......

感谢。

4 个答案:

答案 0 :(得分:8)

你走了:

How to: Reference ASP.NET Master Page Content

从文章中看起来像

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

应该适合你。

请确保按照描述添加MasterType指令,否则可能会出现类型转换错误。 (或者您可以使用主页类型的变量而不是Master,就像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

答案 1 :(得分:3)

您可以将母版页转换为正确的类型:

MyMasterPageType m = (MyMasterPageType)Master;

然后您可以访问您的属性:

m.SqlError

如果您有多个母版页,请让所有母版页从界面继承,并将母版页强制转换为该界面。

答案 2 :(得分:1)

您可以使用&lt;%@ MasterType%&gt;也是为了这个。

答案 3 :(得分:0)

如果您已按照Andy West的回答中的步骤操作并且有一个或多个编译错误,请阅读Foo is not a member of 'System.Web.UI.MasterPage',请确保它们是列表中唯一的编译错误。如果还有其他需要修复的编译错误,则应在修复MasterPage之前修复它们。

这些其他编译错误可能会阻止编译器解析您的MasterPage并检测其他属性。解决后,请进行完整的重新编译。