У меня есть собственный Control1, который динамически добавляется как дочерний элемент управления к Control2, который реализует INamingContainer в CreateChildControls () элемента control2.
Сам Control1 реализует IPostBackEventHandler. Но метод RaisePostBackEvent () никогда не вызывается на Control1, несмотря на то, что я вызываю метод обратной передачи из JavaScript.
И да, есть другие элементы управления, которые реализуют интерфейс IPostBackEventHandler на странице.
Что я пропустил?
Что могло вызвать проблему?
ОБНОВЛЕНИЕ: Control1 всегда создается точно так же, и ему назначается точно такой же идентификатор в Control2
в Control2 это выглядит так:
protected override void CreateChildControls()
{
if(!this.DesignMode)
{
Control1 c = new Control1();
c.ID = "FIXED_ID";
}
base.CreateChildControls();
}
ОБНОВЛЕНИЕ2: Control1:
public class Control1: Control, IPostBackEventHandler
{
...
protected virtual void RaisePostBackEvent(string eventArgument)
{
if(!String.IsNullOrEmpty(eventArgument))
{
// Some other code
}
}
}
если я добавлю строку
Page.RegisterRequiresRaiseEvent(c);
В CreateChildControls () в Control2 этот метод вызывается, но всегда с нулевым аргументом eventArgument.
ОБНОВЛЕНИЕ 3:
В JavaScript в некоторых событиях onClick я делаю следующее:
__doPostBack(Control1.UniqueID,'commandId=MyCommand');
где Control1.UniqueID, конечно, заменяется реальным uniqueID во время рендеринга. Проверил, вызывается этот скрипт.