Скажите, что aspx страница, названная theParent, имеет контроль DataGrid, названный theDataGrid и UserControl, названным theUserControl, и theUserControl имеет кнопку, названную theUcButton.
Да, я знаю, очень образное именование.
Когда theUcButton нажат, переменная сеанса изменяется.
Эта переменная сеанса является избранным параметром для источника данных theDataGrid.
Однако из-за порядка материала, названного в жизненный цикл страницы, когда theUcButton нажат и обратная передача сгенерирована, theParent средства управления загружаются, прежде чем theUserControl сбрасывает переменную сеанса, и theDataGrid не показывает новые данные до следующей обратной передачи.
Как я получаю то, что я хочу работать?
Я использую 3.5, если это имеет значение.
Вот пример кода для вашего пользовательского элемента управления, чтобы инициировать событие.
public partial class WebUserControl : System.Web.UI.UserControl{
public event EventHandler Updated;
protected void Button1_Click(object sender, EventArgs e)
{
//do some work to this user control
//raise the Updated event
if (Updated != null)
Updated(sender, e);
}}
Затем со своей страницы .aspx вы будете обрабатывать новое событие, как обычно.
<uc1:WebUserControl ID="WebUserControl1" runat="server" OnUpdated="WebUserControl1_Updated" />
Код позади:
protected void WebUserControl1_Updated(object sender, EventArgs e)
{
//handle the user control event
}
Вы можете объявить событие как член класса UserControl, поднять его и обработать в классе Page.
Вы также можете использовать другие события, такие как Page.PreRender (), чтобы получать данные после событий пользовательского элемента управления.
Самый простой способ - отложить привязку данных до конца жизненного цикла, такого как событие Page.PreRender, как предлагает joelt. Если вы выполните привязку, у вас должны быть переменные сеанса.