Как использовать метод в мастер-странице из контентной страницы - PullRequest
8 голосов
/ 21 февраля 2011

Я пишу приложение ASP.NET 4 с C #. У меня есть мастер-страница, внутри которой у меня есть следующий метод:

public void DisplayMessage(string input)
{
   Label myMessageDisplayer = (Label)FindControl("uxMessageDisplayer");
   myMessageDisplayer.Text = input;
}

Можно ли вызвать этот метод со страницы содержимого?
На данный момент я использую в Content Page этот код:

Master.DisplayMessage("Item has been inserted.");

И я получаю эту ошибку:

'System.Web.UI.MasterPage' не содержит определения для 'DisplayMessage', и метод расширения 'DisplayMessage', принимающий первый аргумент типа 'System.Web.UI.MasterPage', не найден (вы пропустили директива об использовании или ссылка на сборку?)

Любая помощь будет оценена.

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Вы можете использовать приведение, чтобы получить тип главной страницы, как показали другие, или вы можете добавить директиву MasterType к разметке вашей страницы (вверху, где стандартная директива <%@ Page %>is):

<%@ MasterType TypeName="YourNamespace.YourMasterPageType" %>

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

Master.DisplayMessage("Item has been inserted.");

Директива MasterType доступна от .NET 2 и выше.

6 голосов
/ 21 февраля 2011

Вам необходимо привести Master к фактическому типу мастер-страницы

// MyMasterPage is the type of your masterpage
((MyMasterPage)Master).DisplayMessage("Item has been inserted.");

Вы также можете добавить директиву MasterType вверху своей страницы контента, чтобы добиться того же:

<%@ MasterType VirtualPath="~/MyMasterPage.master" %>

Тогда вы можете использовать:

Master.DisplayMessage('Item has been inserted.');
0 голосов
/ 14 января 2013

Я сделал / попробуйте это:

Мой контроль (MenuEsquerdo.ascx)

<%--<%@ MasterType VirtualPath="~/Site.Master" %>--%>
<%--<%@  MasterPageFile="~/Site.Master" %>--%>
<%--<%@ MasterType TypeName="Delivery.SiteMaster" %>--%>
<%--<%@ MasterType VirtualPath="~/Site.Master" %>--%>
<%@ MasterType TypeName="Delivery.SiteMaster" %>

Элемент управления My Designer (MenuEsquerdo.ascx.designer.cs)

public new Delivery.SiteMaster Master {
            get {
                return ((Delivery.SiteMaster)(base.Master)); // 'System.Web.UI.UserControl' does not contain a definition for 'Master'
            }
        }

И мой код (MenuEsquerdo.ascx.cs)

RepeaterListaMenuEsquerdoCtr.DataSource = this.Master.ClassMercadorias.Take(20);
RepeaterListaMenuEsquerdoCtr.DataBind();

Знаете, как я могу это исправить: «System.Web.UI.UserControl» не содержит определения «Master»?

...