Доступ к свойствам главной страницы из дочерних страниц в ASP.net VB - PullRequest
8 голосов
/ 02 февраля 2010

У меня есть 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 ]

8 голосов
/ 02 февраля 2010

Вот, пожалуйста:

Как выполнить: Ссылка на содержимое главной страницы ASP.NET

Из статьи это выглядит как

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

3 голосов
/ 02 февраля 2010

Вы можете привести мастер-страницу к правильному типу:

MyMasterPageType m = (MyMasterPageType)Master;

Тогда вы можете получить доступ к вашим свойствам:

m.SqlError

Если у вас есть несколько мастер-страниц, пусть все ваши мастер-страницы наследуются от интерфейса и приведут мастер-страницу к этому интерфейсу.

1 голос
/ 04 марта 2010

Вы также можете использовать <% @ MasterType%> для этого.

0 голосов
/ 30 декабря 2015

Если вы выполнили шаги, описанные в ответе Энди Уэста, и у вас есть одна или несколько ошибок компиляции: Foo is not a member of 'System.Web.UI.MasterPage', убедитесь, что они являются единственной ошибкой компиляции в вашем списке. Если есть какие-либо другие ошибки компиляции, которые необходимо исправить, они должны быть исправлены до того, как вы продолжите устранение неполадок в MasterPage.

Эти другие ошибки компиляции могут помешать компилятору проанализировать ваш MasterPage и обнаружить дополнительные свойства. Как только они будут решены, выполните полную перекомпиляцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...