Запуск события без прямого подключения? - PullRequest
0 голосов
/ 02 февраля 2011

В моем приложении ASP.NET у меня есть элемент управления на главной странице, который вызывает событие Foo в определенных случаях / взаимодействиях.

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

К сожалению, единственный способ увидеть, как они общаются между собой, - создать длинную цепочку событий (получить новую MasterPage MasterPageSuperDuper, присоединить обработчик события к событию Foo в пользовательском элементе управления, а затем обратиться к этому событию на главной странице из элемента управления, присутствующего на нескольких страницах - в основном с использованием главной страницы в качестве центра управления).

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

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Вот и мы.

Создать интерфейс, положить в папку app_code

public interface IBinder
{
    void Bind();
}

Интерфейс реализации PageControl

public partial class WebUserControl2 : System.Web.UI.UserControl, IBinder
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void Bind()
    {
    }
}

В вашем контроле на главной странице

public partial class WebUserControl1 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void butRaiseEvent_Click(object sender, EventArgs e)
    {
        CheckSub(this.Parent.Parent.Controls);
    }

    private void CheckSub(ControlCollection cc)
    {
        foreach (Control c in cc)
        {
            if (c is IBinder)
                ((IBinder)c).Bind();
            else
                CheckSub(c.Controls);
        }
    }
}

Дайте мне знать, если это работает.

0 голосов
/ 02 февраля 2011

Элементы управления на странице не имеют ни малейшего понятия, кто такие «дети», так что вы не можете автоматически заставить их сказать: «Посмотрите, есть другой элемент управления на этой странице. Как вы делаете другой элемент управления?» без какой-либо работы, обычно через родительский контейнер.

Существуют механизмы, которые вы можете использовать, чтобы запутывать вещи, но вы все равно должны получать события через общий «контейнер», такой как страница или главная страница.

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

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