Доступ к пользовательскому элементу управления из другого элемента управления - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть магазин, реализованный в ASP.NET/C#.Существует страница - ReservationProduct.aspx - с элементом управления для отображения продукта - BuyTourProduct - и другим элементом управления для отображения сведений о продукте - TourProductDetail.

Я знаю, что это хорошая форма для сохранения двухотделен, но это для очень специфического использования магазина.Я хочу, чтобы BuyTourProduct мог установить панель в элементе управления TourProductDetail, чтобы она была видимой или не использовалась PanelName.Visible=true|false.

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

Кстати, это пара 3-х элементов управления, которые я модифицирую, поэтому изменение того факта, что они являются 2-мя отдельными элементами управления, на самом деле не вариант для нас.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Всегда лучше написать событие внутри пользовательского элемента управления BuyTourProduct (например: необходимо обновить детали продукта) Затем вы можете обработать это событие на странице, где вы размещаете элемент управления.

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

Таким образом, в описанном выше обработчике события для обработчика события BuyTourProduct на странице вызовите свойство ShowHidePanel элемента управления TourProductDetail.

1 голос
/ 29 февраля 2012

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

Вам понадобятся две вещи:

  • Событие, запущенное из элемента управления BuyTourProduct.
  • Метод взаимодействия с PanelName в элементе управления TourProductDetail.

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

public class BuyTourProduct : UserControl
{
    // ...

    public delegate void MyHideEventDelegate();
    public event MyHideEventDelegate MyHideEvent;

    // ...

    public void SomeFunction()
    {
        if (MyHideEvent != null)
            MyHideEvent();
    }

    // ... 
}

Далее вам необходимо добавить метод взаимодействия с PanelName внутри TourProductDetail:

public class TourProductDetail : UserControl
{
    // ...

    private Panel PanelName;

    // ...

    public void SetPanelNameVisible(Boolean visible)
    {
        PanelName.Visible = visible;
    }

    // ...
}

На странице вы подпишетесь на желаемое событие или MyHideEvent:

public partial class ReservationProduct : System.Web.UI.Page
{
    // ...

    protected void Page_Load(object sender, EventArgs e)
    {
        buyTourProduct.MyHideEvent += new BuyTourProduct.MyHideEventDelegate(buyTourProduct_MyHideEvent);
    }

    // ...

    void buyTourProduct_MyHideEvent()
    {
        tourProductDetail.SetPanelNameVisible(false);
    }

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