Сценарий регистрации ASP.NET после частичной обратной передачи страницы (UpdatePanel) - PullRequest
2 голосов
/ 26 августа 2010

У меня есть простая форма (текстовое поле, кнопка отправки), которая обернута в панель обновлений.

<asp:UpdatePanel ID="ReplyUpdatePanel" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       <asp:Textbox id="ReplyTextBox" runat="server"/>
       <asp:Button id="SubmitButton" OnClick="SubmitButton_Click" runat="server"/>
    <ContentTemplate>
</asp:UpdatePanel>

Итак, когда я нажимаю кнопку, запускается событие щелчка на стороне сервера (SubmitButton_Click)что-то происходит с БД, и страница перерисовывается (асинхронно).

Вот моя проблема - мне нужно выполнить некоторый JavaScript после того, как все "вещи случатся с БД".

Другими словами, мне нужно создать JavaScript, данные / параметры которого основаны на логике на стороне сервера.

Я пробовал это:

Page.RegisterStartupScript

и это

ScriptManager.RegisterStartupScript

Ничего не работает (ничего не происходит).

Теперь я могу подключиться к функции .add_pageLoaded с помощью клиентской библиотеки AJAX (для выполнения клиентских сценариев после завершения частичного обновления)., но проблема в том, что мне нужны данные с сервера, который создается по событию нажатия кнопки.

Т.е.:

Sys.Application.add_init(function () {
                Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function (sender, args) {
                    var panels = args.get_panelsUpdated();
                    for (var i = 0; i < panels.length; i++) {
                        // check panels[i].id and do something
                    }
                });
            });

Единственный "взлом", о котором я могу думать в данный момент, эточтобы сделать вышеупомянутое, но позвоните в веб-службу, снова получите все данные ивыполнение моего сценария.Я говорю «взломать», потому что мне не нужно выполнять асинхронную обратную передачу, подключиться к обработчику событий после частичной обратной передачи, а затем снова вызвать сервер, чтобы получить информацию, которая была ранее опубликована.

Похоже на обычнуюпроблема.И нет, я не могу удалить UpdatePanel (хотя я бы с удовольствием), не хочу тратить время на споры, почему.

Есть какие-нибудь нехарактерные идеи?

РЕДАКТИРОВАТЬ

Уточнение данных, которые мне нужно отправить в скрипт:

Я набираю некоторыетекст в текстовом поле, нажмите кнопку Отправить, затем сервер создает запись базы данных и возвращает объект, который имеет свойства, такие как идентификатор, имя, URL, Blah и т. д. Это значения, которые требуются сценарию.

Поэтому, если бы я должен был вызывать веб-сервис из клиентского кода, чтобы получить только что созданные значения, мне нужно было бы сделать несколько хаков (получить последнюю измененную запись, которая имеет значениетекстовое окно).Не идеально, и два AJAX не требуют одного сообщения формы.(обновить обратную передачу панели, затем вызов веб-службы).

1 Ответ

2 голосов
/ 26 августа 2010

Вместо add_pageLoaded вам понадобится add_endRequest здесь, вот так:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {
  //check here...
});

Разница в том, что endRequest запускается при возврате частичной обратной передачи.

...