У меня есть usercontrol DmsRegisterPod
, который выводится в репитере, который сам находится внутри UpdatePanel
. У меня есть событие на DmsRegisterPod
называется OnUpdated
который я подписавшей в повторители ItemDataBound
событий, например:Поднятие события от пользователей и уведомлений подписчиков
protected void rptPendingDmsRequests_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DealershipIRLink irLink = (DealershipIRLink)e.Item.DataItem;
DmsRegisterPod dmsRegisterPod = (DmsRegisterPod)e.Item.FindControl("ucDmsRegisterPod");
dmsRegisterPod.ValidationGroup = string.Format("dms-pod-{0}", e.Item.ItemIndex);
dmsRegisterPod.DealershipIRLink = irLink;
dmsRegisterPod.OnUpdated += dmsRegisterPod_OnUpdated;
}
}
private void dmsRegisterPod_OnUpdated(object sender, EventArgs e)
{
this.DataBind();
}
событие является установка как таковая в UserControl:
public event EventHandler OnUpdated;
private void Updated(EventArgs e)
{
if (this.OnUpdated != null)
{
OnUpdated(this, e);
}
}
Он поднимается в обработчик Accept
нажмите:
protected void btnAccept_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
this.DealershipIRLink.dms_account_number = txtDmsNumber.Text;
this.DealershipIRLink.id_dealer_ir_link_status = DealerIRLinkStatus.DealerIRLinkStatusIdentifier.Approved;
this._irLinkService.UpdateDealershipIRLink(this.DealershipIRLink);
this.Updated(e);
}
}
Однако обработчик, OnUpdated
всегда null
поэтому событие никогда не поднимается. Как будто элемент управления каким-то образом теряет привязку к событию. Может ли кто-нибудь увидеть, что я сделал неправильно здесь?
Есть трюк, спасибо большое. Из любопытства, что происходит с событием? Было ли оно потеряно во время обратной передачи? – DGibbs
@DGibbs: ** все объекты ** расположены в конце жизненного цикла страницы и должны быть воссозданы при каждой обратной передаче. Это происходит автоматически при контрольных значениях, таких как «TextBox.Text» из-за «ViewState» или обработчиков событий, которые добавляются декларативно, но все остальные объекты должны быть воссозданы вручную. –
Должен ли я снова применить группу проверки/'DealershipIRLink' в обработчике' ItemCreated'? В настоящее время я храню идентификатор dataitem в скрытом поле, а затем извлекаю из базы данных в 'Accept', но было бы неплохо не делать этого. Я предполагаю, что это невозможно из-за того, что «DataSource» явно не установлен. – DGibbs