как переназначить ретранслятор (внутри главной страницы) со страницы содержимого?

Можно ли повторно привязать ретранслятор (внутри главной страницы) к странице содержимого?
Мои страницы основаны на главной странице и страницах содержимого, и у меня есть некоторые ссылки (якоря) для загрузки файлов!

После щелчка по этим ссылкам срабатывает page_load страницы содержимого и отображается окно загрузки.
Но мы никогда не получим page_Load главной страницы, а на главной странице у меня есть сводка для отображения количества загрузок.
Как я могу повторно привязать это сводка (внутри главной страницы) со страницы содержимого перед отображением окна загрузки?


person SilverLight    schedule 14.11.2011    source источник


Ответы (4)


Да, это довольно просто. Вы можете «найти» элемент управления на странице содержимого. Вот пример, в котором я привязываюсь к элементу управления GridView.

Владелец:

<asp:GridView runat="server" ID="gridViewMaster" AutoGenerateColumns="true" />

Страница содержимого:

var gridView = (GridView) Master.FindControl("gridViewMaster");

gridView.DataSource = dt;
gridView.DataBind();

Просто замените объект представления сетки и идентификатор элемента управления на свой репитер ... и привяжите его к любому объекту, который хотите.

Изменить - вот код для поиска div на стороне сервера:

var divMaster = (System.Web.UI.HtmlControls.HtmlGenericControl)Master.FindControl("divMaster");
divMaster.InnerHtml = "<h2>Hello World</h2>";
person Ed B    schedule 14.11.2011
comment
Дорогой Эд Би, большое спасибо. Можно ли сделать эту работу для серверного div? - person SilverLight; 15.11.2011
comment
Да, работает так же. Просто добавьте div к мастеру. Затем найдите его на странице содержания. Я добавил код, чтобы найти серверный div выше - person Ed B; 15.11.2011
comment
Я тестирую это, я пробовал это ›var SummaryContainer = Master.FindControl (SummaryContainer); SummaryContainer.DataBind (); но этот div никогда не показывает мне новые результаты, и я должен нажать кнопку на странице, чтобы получить результаты. - person SilverLight; 15.11.2011

да. У вас есть доступ к главной странице из вашей веб-формы с помощью this.Master, которую вам затем нужно будет преобразовать в соответствующий тип. Оттуда вы можете получить доступ к любым общедоступным методам или свойствам, которые вы определили.

Просто добавьте туда ReBind метод, который делает то, что вы хотите, и все будет в порядке.

ИЗМЕНИТЬ

Это было бы примерно так:

(this.Master as WhateverTypeYourRealMasterPageIs).ReBind();

person Adam Rackis    schedule 14.11.2011
comment
спасибо за все ответы / не могли бы вы показать мне несколько кодов! - person SilverLight; 15.11.2011
comment
спасибо за редактирование, WhateverTypeYourRealMasterPageIs - ›как я могу это найти? я пробовал (this.Master as MasterPage) .ReBind (); но есть ошибка! - person SilverLight; 15.11.2011
comment
Перейдите к коду вашей главной страницы. Вы должны увидеть там название класса. Это тип класса мастер-страницы. - person Adam Rackis; 15.11.2011

Вы можете предоставить дочерним элементам элемент управления главной страницы. Сделайте элемент управления общедоступным с помощью средства доступа на главной странице ... например:

public Repeater MasterpageRptr {get;set;}

Затем на своей дочерней странице добавьте определение MasterType:

<%@ Page Language="C#" Title="Content Page" MasterPageFile="~/MyMaster.master"%>
<%@ MasterType TypeName="MyMaster" %>

(where MyMaster is the master page class file)

Затем вы можете вызвать это в своем дочернем коде, используя аксессуар.

.

.

Пожалуйста, проголосуйте, если это полезно.

person Ray K    schedule 14.11.2011
comment
спасибо за помощь. возможно ли выполнить эту работу для серверного div? - person SilverLight; 15.11.2011

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

Пример кода:

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

публичное событие EventHandler RefreshRequested;

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

private void OnRefreshRequested()
{
    //make sure the event is being listened to. no point raising an event if no one cares!
    if (this.RefreshRequested != null)
    {
        this.RefreshRequested(this, EventArgs.Empty);
    }
}

Теперь главная страница будет подписываться на событие пользовательского элемента управления и действовать соответствующим образом. Подписка на событие аналогична подписке на любое другое событие (например, Button_Click).

Дайте мне знать, если это прояснит ситуацию.

person Shai Cohen    schedule 14.11.2011