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

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

(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

это не работает, я что-то упускаю? Я вызываю оба кода внутри обработчика регулярных страниц 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;

еще ничего


person Ayyash    schedule 17.05.2009    source источник


Ответы (3)


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

protected override void OnLoad(EventArgs e)
    {
        myTextBox.Text = "anything";
        base.OnLoad(e);
    }
person Ayyash    schedule 18.05.2009
comment
Если вложенная главная страница не вызывает Page_Load, что-то еще не так, потому что все методы Page_Load должны быть вызваны (на главной странице, вложенной главной странице и странице содержимого). Я добавил дополнительную информацию к своему исходному ответу. - person Ronald Wildenberg; 18.05.2009

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

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

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

person Ronald Wildenberg    schedule 17.05.2009
comment
я только что создал новый проект с нуля, все равно получаю те же результаты! я не могу получить доступ ни к чему на средней вложенной странице - person Ayyash; 18.05.2009
comment
Я думал, что ваш вопрос касается доступа к свойствам на корневой главной странице как с вложенной главной страницы, так и со страницы содержимого. Я попробую и посмотрю, смогу ли я заставить работать другой сценарий: доступ к свойству на вложенной главной странице со страницы содержимого. - person Ronald Wildenberg; 18.05.2009

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

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

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

person freedeveloper    schedule 06.05.2015