У меня есть следующая структура в пользовательском контроле, который загружается страницей (Parent UC):
<UpdatePanel>
<UpdatePanel>
.. In the codebehind, it loads a Child user control at runtime
</UpdatePanel>
</UpdatePanel>
В UC OnPageLoad регистрирует скрипт.
ScriptManager.RegisterStartupScript(this, typeof(Page), "Load_" + this.ClientID, base.GetRegisterScript(this.ClientID), true);
Функция JS никогда не выполняется при асинхронных обратных передачах. Если я удаляю UpdatePanels, он работает как положено
РЕДАКТИРОВАТЬ: использовал this.GetType () вместо typeof (Page), но не повезло
РЕДАКТИРОВАТЬ снова:
Мэтт - я пытался заменить typeof (Page) именем UC. Вот обновленная строка:
ScriptManager.RegisterStartupScript(this, typeof(TemplateAreaTypeOne), "Load_" + this.ClientID, "...JS function here,,", true);
Для пояснения, Страница загружает родительский UC, имеющий эти UpdatePanels. Затем ParentUC загружает ChildUC, и ScriptManager.RegisterStartuScript используется в ChildUC
EDIT
Разметка имеет:
<script type="text/javascript">
//<![CDATA[
; findControl('PageLoadedHiddenTxtBox').value ='Set';OnLoadBegin('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit');OnLoadEnd('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit');
document.getElementById('ctl00_WorkSpaceContent_informationSummary').dispose = function() {
Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_WorkSpaceContent_informationSummary'));
}
//]]>
</script>
Обратите внимание, что вызываемыми функциями являются OnLoadBegin и OnLoadEnd, которые были добавлены в HTML
ИЗМЕНИТЬ СНОВА
Получил работу, используя:
ScriptManager.RegisterStartupScript(this.Page, typeof(Page),....)
Не уверен, почему это работает, когда я использую ссылку на страницу.
- Будет ли это работать, если на странице будет несколько элементов управления?
- Почему это работает, когда я использую ссылку на страницу?