Разделение значения от дочернего к родительскому контролю - PullRequest
3 голосов
/ 11 октября 2010

Я относительно новичок в этом, но вот моя проблема.

В asp.net у меня есть родитель и дочерний элемент управления.В дочернем контроле у ​​меня есть выпадающий список.Основываясь на выбранном значении выпадающего списка, я бы хотел включить видимость панели в родительском элементе управления.Например, если я выберу Показать в раскрывающемся списке дочернего элемента управления, мне нужно передать значение true родительскому элементу управления, чтобы сделать Panel видимой, и наоборот.Как я должен это сделать.Я читал, что это можно сделать с помощью обработки событий, и видел определенные сценарии, но я не совсем уверен в этом.Пожалуйста, помогите!

Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 октября 2010

Создает событие, которое прослушивает ваш родительский элемент управления.

В коде вашего родительского элемента управления создайте объект типа вашего дочернего элемента управления.Что-то вроде:

private MyWebControl childControl;

Затем в дочернем элементе управления определите событие

public event System.EventHandler SelectionChanged;

В событии OnIndexChanged вашего DropDownList, после того как вы выполните свою обработку, поднимите событие:

if(this.SelectionChanged!= null)
{
     this.SelectionChanged(this, new EventArgs()); 
     // You can send the index of the DDL in the event args
}

В родительском контроле подключите событие.Page_Init хорош

this.childControl.SelectionChanged+=new EventHandler(childControl_SelectionChanged);

Все еще в родительском контроле, определите свой метод

private void childControl_SelectionChanged(object sender, EventArgs e)
{
      /// Do your processing here.
      /// Grab the DDL's index from the EventArgs and do your processing

}

Должно быть все, что вам нужно, чтобы он заработал!

0 голосов
/ 11 октября 2010

По сути, вам просто нужно подписаться на событие SelectedIndexChanged и обработать его.Событие запускается, когда выбранный элемент был изменен.Обратите внимание, что вы должны разрешить автоматическую обратную передачу в раскрывающемся элементе управления, чтобы убедиться, что событие запускается сразу после того, как пользователь изменил значение раскрывающегося списка.

В файле ASPX:

...

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

dropDown.SelectedIndexChanged += OnDropDownChanged;

А затем обработайте его:

public void OnDropDownChanged(object sender, EventArgs e)
{
    // alter the panel's visibility here; the drop down's value contains
    // the selected item; note that you shoud use "(DropDownList)sender"
    // to access it
}

РЕДАКТИРОВАТЬ: Кроме того, взгляните на более сложный пример на MSDN .Обратите внимание, что событие объявлено в предке DropDownList ListControl.

0 голосов
/ 11 октября 2010

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

Другой способ сделать это - сохранить раскрывающееся значение в ViewState для события change.Таким образом, параметр ViewState может быть прочитан родительским элементом управления.

Если возможно, вам обязательно следует перейти к первому варианту.

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