Невозможно получить доступ к управлению с вложенной главной страницы на странице содержимого

Я использую вложенные главные страницы, где хочу использовать Label элемент управления вложенной главной страницы и обновить ее текст. но это не доступ. Когда я удалил внешнюю главную страницу, она работает нормально. Ниже приведены разметка и код.

ВНЕШНИЙ МАСТЕР

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Roster.Site" %>

ВНУТРЕННИЙ МАСТЕР

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="RoasterMaster.master.cs" Inherits="Roster.RoasterMaster"  MasterPageFile="~/Site.Master" %>
<%@ MasterType VirtualPath ="~/Site.Master" %>

СТРАНИЦА СОДЕРЖАНИЯ

<%@ Page Language="C#" AutoEventWireup="true" Inherits="RequestsView" CodeBehind="ViewRequestsByPM.aspx.cs" MasterPageFile ="~/Roaster/RoasterMaster.Master" Title ="Roaster- View Requests by PM" %>
<%@ MasterType VirtualPath ="~/Roaster/RoasterMaster.Master" %>

КОД СТРАНИЦЫ С КОНТЕНТОМ

protected void Page_Load(object sender, EventArgs e)
{


    Label lblTitle = new Label();

    lblTitle =(Label)Master.FindControl("lblTitle");
    lblTitle.Text = "View Roaster Request";
}

Что не так с реализацией. Пожалуйста помоги. Спасибо


person Rajaram Shelar    schedule 06.12.2012    source источник
comment
Вы знаете, как пользоваться общедоступной недвижимостью? это был бы гораздо лучший способ установить / получить значение метки   -  person DavidB    schedule 06.12.2012
comment
вам нужно найти конкретную главную страницу, используя сначала что-то master.master или page.master, которое содержит элемент управления lblTitle   -  person CodeSpread    schedule 06.12.2012
comment
На странице есть специальные разметки '‹% @ MasterType VirtualPath = ...%›'   -  person Rajaram Shelar    schedule 06.12.2012


Ответы (2)


Вы можете добавить приведенный ниже фрагмент кода в

ВСТАВЛЕННАЯ МАСТЕР-СТРАНИЦА

public string PageTitle { get; set; } // In page_load
lblTitle.Text = PageTitle;

КОД СОДЕРЖАНИЯ СТРАНИЦЫ

this.Master.PageTitle = "YOUR TEXT";

Это сработает для вас ...

person Kitty    schedule 06.12.2012

Предполагая, что ваша метка находится на главной странице Ростера, вы можете просто добавить метод для установки текста в коде главной страницы позади. Например,

в RoasterMaster.master.cs

public void SetTitle(string value)
{
   this.lblTitle = value;
}

И в коде страницы содержимого

Master.SetTitle("View Roaster Request");

В случае, если ваша метка находится во внешнем мастере, вы можете аналогичным образом перенаправить вызов внешнему мастеру из основного кода реестра.

ИЗМЕНИТЬ
Ваш код не работает во вложенных основных сценариях, поскольку содержимое главной страницы добавляется в иерархию элементов управления страницей с другим контейнером имен. FindControl метод не охватывает несколько контейнеров именования, как здесь - из-за вложенности у вас есть вложенные контейнеры именования. Page.Master предоставит вам внешний контейнер для именования, но ваша метка может находиться во внутреннем контейнере для именования. Один из способов - написать собственную реализацию управления поиском, которая будет повторяться в дереве элементов управления, но на самом деле это не имеет смысла - я бы предпочел использовать приведенный выше код, который более эффективен и, что более важно, лучше обслуживается.

person VinayC    schedule 06.12.2012