VB / ASP.NET Fire события через веб-части - PullRequest
2 голосов
/ 10 февраля 2009

Прежде всего, моя среда: VB.NET .NET 2.0 Панели обновления AJAX также используются вокруг зон веб-частей. У меня есть главная страница и страница по умолчанию. Страница по умолчанию имеет WPM и две зоны. каждая веб-часть - это просто оболочка, а для A & B

используется пользовательский контроль

У меня есть две веб-части, A & B. (Usercontrols) - A имеет несколько кнопок. В B есть список и вспомогательные элементы, которые заполняют список и обновляют панель обновления, которая также находится (внутри веб-части B), оборачивая список. Я хочу нажать кнопку в веб-части A, и она запускает подпрограмму в веб-части B, которая называется Public Sub FillList (), и я не могу понять, как это сделать. Я просмотрел веб-соединения и понял, что могу передавать свойства, что нормально, но я хочу вызывать события subs / fire.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 февраля 2009

Я знаю, что это немного грязно, но я нашел решение, которое вроде работает:

MyControlThatNeedsUpdated grid = (MyControlThatNeedsUpdated)FindControlRecursive(Page, "MyControlThatNeedsUpdated");
grid.updateList();


private Control FindControlRecursive(Control root, string ControlType)
{
    if (root.GetType().Name == ControlType)
    {
        return root;
    }

    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, ControlType);
        if (t != null)
        {
            return t;
        }
    }

    return null;
}

Метод, который я вызываю, называется updateList ()

1 голос
/ 10 февраля 2009

Это звучит как случай для " всплывающего события ".

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

Элемент управления кнопки в веб-части A может содержать следующий код в событии щелчка:

RaiseBubbleEvent(Me, args)

где args - это некоторый пользовательский тип, производный от System.EventArgs. Затем это вызовет (или «всплывет») событие (с вашими пользовательскими аргументами) в родительском контейнере (в вашем случае сам UserControl). Это обрабатывается в следующем событии в родительском контейнере:

Protected Overrides Function OnBubbleEvent(ByVal source As Object, ByVal args As System.EventArgs) As Boolean

Это можно повторить в иерархии содержания на вашей веб-странице (при этом страница является конечным контейнером). Как только это событие достигнет контейнера, который является родительским для обоих ваших пользовательских контролей (A & B), вы можете затем вызывать открытые методы для UserControl B из кода для родительского контейнера, передавая пользовательские события, если хотите.

...