Как вызвать функцию javascript на стороне клиента после загрузки определенной UpdatePanel - PullRequest
32 голосов
/ 04 декабря 2008

Как можно вызвать метод javascript на стороне клиента после загрузки определенной панели обновления?

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler) не работает для меня, потому что это сработает после того, как ЛЮБАЯ панель обновлений завершит загрузку, и я не могу найти способ найти на стороне клиента, какой

ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID не работает для меня, так как это объект на стороне сервера, и я хочу на стороне клиента

Платформа ClientSide .Net должна знать, какую UpdatePanel она обновляет, чтобы обновить правильный контент. Наверняка есть способ подключиться к этому событию?

Любая помощь будет оценена.

Ответы [ 3 ]

48 голосов
/ 04 декабря 2008

Спасибо - оба хороших ответа. Я пошел с клиентским сценарием "загружен" в конце. Это довольно похороненный метод, который 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>
13 голосов
/ 04 декабря 2008

Вы можете перехватить событие PageRequestManager.beginRequest и проверить свойство BeginRequestEventArgs.postBackElement .

Обратите внимание, что он не на самом деле дает вам UpdatePanel, но элемент управления внутри UpdatePanel. Впрочем, этого должно быть достаточно.

Редактировать: Еще лучше, событие PageRequestManager.pageLoaded дает вам PageLoadedEventArgs.panelsUpdated PanelCreated ) свойства.

1 голос
/ 04 декабря 2008

Это может быть вашим решением.

В коде для события OnLoad в UpdatePanel зарегистрируйте сценарий запуска.

string scriptText = "alert('Bar!');";

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...