asp.net выполняет действие после завершения привязки данных дочерних элементов управления

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

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

Я надеялся, что смогу подключиться к событию usercontrol.databound, но, похоже, его нет.

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


person Daniel Powell    schedule 17.08.2010    source источник


Ответы (2)


Вам не нужно, чтобы дочерние элементы управления уведомляли родителя. Посмотрите на страницу ASP.Net: жизненный цикл. Вам нужно поместить код в пользовательский элемент управления контейнера в событии PreRender. Это выполняется после событий обратной передачи.

person TheGeekYouNeed    schedule 17.08.2010
comment
Я подумывал добавить его в предварительный рендер в крайнем случае. У нас был неудачный опыт выполнения подобных вещей в предварительном рендеринге раньше, но я думаю, что это было главным образом потому, что один класс бога контролировал всю логику, а не каждый элемент управления имел логику для того, что ему нужно. - person Daniel Powell; 17.08.2010

На основе событий жизненного цикла страницы ASP.net статья я использовал это:

protected void Page_PreRenderComplete(object sender, EventArgs e)
{
  if (!IsPostBack) //only at 1st load
    UpdateSelection();
}

protected void UpdateSelection()
{
  UpdateSelection(listItems.SelectedValue);
}

protected void listItems_SelectedIndexChanged(object sender, EventArgs e)
{
  UpdateSelection();
}

В моем случае UpdateSelection загружал данные XML из файла, выбранного в раскрывающемся списке (который в начале указывает на индекс 0), и нуждался в том, чтобы некоторые CheckBoxList на странице сначала получали свои элементы из других файлов XML, чтобы они позволяли код для проверки элементов на них на основе данных XML

С этого момента UpdateSelection просто вызывается в событии SelectedIndexChanged раскрывающегося списка (они выполняют PostBacks, поэтому в PreRenderComplete я игнорирую их, чтобы избежать повторного выполнения UpdateSelection)

person George Birbilis    schedule 11.07.2013