Как получить доступ к элементам управления внутри вложенной главной страницы? почему он ведет себя не так, как контентные страницы? - PullRequest
7 голосов
/ 17 мая 2009

Есть ли разница между этими двумя сценариями:

(1) Доступ к свойству на главной странице от обычного ребенка

(2) Доступ к свойству на главной странице с вложенной главной страницы

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

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx

это работает, но потом, когда я применил тот же метод на вложенной главной странице:

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master

это не работает, я что-то упустил? Я вызываю оба кода в обработчике regulare page_load ...

Я также заметил, что не могу установить значение текстового поля внутри вложенной главной страницы из кода позади, определенно что-то мне не хватает, что это? Чтобы пролить свет на эту проблему, вот пример:

Вложенная мастер-страница:

<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox>
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder>
</asp:Content>

Код:

Response.Wrote(tx2.Text);

Я НИЧЕГО не понимаю, почему что я пропустил? обратите внимание, что я также попробовал рекурсивный поиск:

String str = ((TextBox)((Content)FindControl("Content2")).FindControl("tx2")).Text;

все равно ничего

Ответы [ 4 ]

5 голосов
/ 15 июня 2012
ContentPlaceHolder cp = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1");
  //base content place holder id

Label objLabel3 = (Label)cp.FindControl("lblNested");
  //lblNested is id in nested master page
4 голосов
/ 18 мая 2009

Я прочитал несколько вещей здесь: http://www.odetocode.com/Articles/450.aspx и обнаружил, что вложенная страница в середине никогда не вызывает Page_Load! вместо этого он запускает событие загрузки, которое вы можете перехватить для установки любых полей, поэтому ответ был: на вложенной странице сделайте следующее:

protected override void OnLoad(EventArgs e)
    {
        myTextBox.Text = "anything";
        base.OnLoad(e);
    }
2 голосов
/ 17 мая 2009

Это должно работать без проблем, поэтому что-то еще должно быть не так. Я только что попробовал это в простом тестовом проекте, и у меня нет проблем с поиском элемента управления на главной странице в обоих случаях.

Я бы проверил (снова), ссылаетесь ли вы на правильную главную страницу внутри своей вложенной главной страницы. Также вы можете проверить тип времени выполнения свойства Master внутри вашей вложенной главной страницы. Это должен быть тип вашей главной страницы.

РЕДАКТИРОВАТЬ : Я думал, что проблема была в том, чтобы найти элемент управления в корневой главной странице из вложенной главной страницы, и это должно работать без проблем. Чтобы найти элемент управления внутри заполнителя содержимого на вложенной главной странице, взгляните на следующее сообщение на форуме .

0 голосов
/ 06 мая 2015

Вы можете иметь абсолютный контроль над своим контентом как на главной странице, так и на вложенной странице со страницы контента, используя директивы:

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

См. Отличную статью К. Скотта Аллена в Ода Коду

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