У меня есть пользовательский элемент управления пользовательского интерфейса, который имеет класс JavaScript, написанный на платформе AJAX.NET. Он наследуется от Sys.UI.Control. Сам элемент управления является UserControl. В методе рендеринга я обертываю элемент управления в промежутке и даю идентификатор промежутка ClientID пользовательского элемента управления. Таким образом, я могу сделать это позже:
var control = $find('<%= ServerControlID.ClientID %>');
Это позволяет мне получить клиентский объект, представляющий элемент управления пользовательского интерфейса.
Я создаю элемент управления в Javascript, выполняя это (также в методе рендеринга)
writer.Write(@"<script type='text/javascript'>
Sys.Application.add_init(function() {
debugger;
$create(General.Filters.AccountGroupFilter,
" + GetProperties() + @",
null,
null,
$get('" + this.ClientID + @"'));
});
</script>");
Это создает объект. Это делается внутри события init жизненного цикла.
Проблема в том, что этот элемент управления обернут внутри UpdatePanel потребляющей страницей / элементом управления. Когда другой элемент управления инициирует обновление, все пользовательские интерфейсы элемента управления перерисовываются, НО событие init НИКОГДА НЕ ЗАПУСКАЕТСЯ.
Что происходит тогда, когда я делаю это:
var control = $find('<%= ServerControlID.ClientID %>');
if(control != null)
control.doSomething();
Ничего не происходит, потому что $ find не находит элемент управления после вызова AJAX. Я знаю, что я НЕ делаю это правильно. Куда я иду не так. Статья MSDN для этого материала указывает на меня кругами!
РЕДАКТИРОВАТЬ: подумал, что я бы включить метод Render, который я делаю в части UserControl.cs
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<span id=\"" + this.ClientID + "\" >");
writer.Write(@"<script type='text/javascript'>
Sys.Application.add_init(function() {
$create(TradePMR.OMS.Resources.UserControls.General.Filters.AccountGroupFilter,
" + GetProperties() + @",
null,
null,
$get('" + this.ClientID + @"'));
});
</script>");
base.Render(writer);
writer.WriteEndTag("span");
}