Как вызвать функцию javascript на стороне клиента после загрузки определенной UpdatePanel
Как можно вызвать метод javascript на стороне клиента после загрузки определенной панели обновления?
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler)
не работает для меня, потому что это срабатывает после того, как ЛЮБАЯ панель обновления завершит загрузку, и я не найду на стороне клиента способ найти то, что является
ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID
не работает для меня, так как это объект на стороне сервера, и я хочу, чтобы клиентская сторона
Структура ClientSide.Net должна знать, какой UpdatePanel она обновляет, чтобы обновить правильный контент. Наверняка есть способ подключиться к этому событию?
Любая помощь будет оценена по достоинству.
Ответы
Ответ 1
Вы можете подключить событие PageRequestManager.beginRequest и проверить BeginRequestEventArgs. postBackElement.
Обратите внимание, что это не дает вам UpdatePanel, но элемент управления внутри UpdatePanel. Это должно быть достаточно хорошо.
Изменить: Еще лучше, PageRequestManager.pageLoaded событие дает вам PageLoadedEventArgs.panelsUpdated (и panelsCreated).
Ответ 2
Спасибо - оба хорошие ответы. В конце я пошел с клиентской стороной script "pageloaded". Это довольно похоронили метод, который Google не раскрыл мне. Для тех, кто заинтересован, этот код работает с FireBug, чтобы дать хорошую демонстрацию метода PageLoaded для поиска обновленных панелей:
<script type="text/javascript">
$(document).ready(function() {
panelsLoaded = 1;
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
});
function PageLoaded(sender, args) {
console.log("I have occured " + panelsLoaded++ + " times!");
var panelsCreated = args.get_panelsCreated();
for (var i = 0; i < panelsCreated.length; i++) {
console.log("Panels Updating: " + panelsCreated[i].id);
}
var panelsUpdated = args.get_panelsUpdated();
for (var i = 0; i < panelsUpdated.length; i++) {
console.log("Panels Updating: " + panelsUpdated[i].id);
}
}
</script>
Ответ 3
Это может быть ваше решение.
В коде для события UpdatePanel OnLoad зарегистрируйте запуск script.
string scriptText = "alert('Bar!');";
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);