Модальное диалоговое окно и бесконечный цикл __doPostback - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть модальное диалоговое окно, созданное с использованием ModalPopupExtender.В нем создан пользовательский интерфейс с использованием веб-сервисов и шаблонов JQuery.Существует также скрытая кнопка ASP.NET, которая вызывается из javascript с использованием метода __doPostback ().Javascript скрывает модальное всплывающее окно, и на кнопке вызывается __doPostback (который находится внутри ModalPopupExtender)

Я использую эту технику для передачи некоторых параметров из javascript.Серверный обработчик событий выполняет некоторую обработку и переносит на страницу (в некоторых случаях обратно на себя)

Это прекрасно работает, когда страница, на которую он переходит, отличается, но если она переносится на ту же страницупостбэк происходит снова и снова, пока стек не взорвется.

Как остановить повторную передачу при повторной передаче на ту же страницу?Я полагаю, что это не происходит в первый раз, потому что он публикует на другой странице, и постбэк аннулируется.

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

Звучит ужасно, я знаю, все, что я хочу сделать, однако, это вызвать функцию на стороне сервера из javascript с некоторыми переменными.Есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Без примера кода я могу только строить догадки и, надеюсь, указать вам правильное направление.

При переносе на новую страницу старая страница (и, следовательно, javascript на этой странице) выходит из области видимости и, следовательно, не продолжает выполняться. Однако, если страница перезагружается и условие, вызвавшее __doPostback, продолжается, вы создали циклическую ссылку, которая вызывает вашу проблему. Прежде чем вызывать __doPostback, но пока вы все еще на клиенте, вам необходимо очистить любое условие, которое может вызывать цепочку событий.

Если вы не можете раскрыть, что вызывает вашу цепочку событий, вы можете подумать, что вместо передачи обратно на ту же страницу переносите на новую страницу (bounce.aspx), которая, в свою очередь, вызывает response.redirect BACK для этой страницы, так что что это не Postback, когда он перезагружается, а свежий экземпляр страницы. (Да, это клудж, но это может быть эффективный стоп-гэп ...)

Приветствия

CEC

1 голос
/ 12 апреля 2011

Ну, вы отправляете обратно, поэтому у вас есть контроль над разметкой на стороне сервера. Просто вставьте свой javascript, который делает репост в контейнер, и в случае, если страница отправляет на себя, скрыть этот контейнер, чтобы он не загружался на страницу ....

Это или вы можете сделать клиентские куки или параметр строки запроса. Оба могут быть вялыми.

0 голосов
/ 12 апреля 2011

Спасибо за ответы. Я думаю, что нашел решение.

В обратном вызове на стороне сервера я делал это:

setupPage();
Server.Transfer("mypage.aspx", true);

изменив это на:

setupPage();
Server.Transfer("mypage.aspx");

исправляет проблему.

SetupPage () хранит все данные в скрытых полях, и я предположил, что сохранение состояния формы будет необходимо, чтобы оно сохранялось после передачи. Похоже, это не так, поскольку все настройки, которые я выполнил на странице до передачи, по-прежнему присутствуют.

Странно или, возможно, я неправильно понимаю что-то фундаментальное в .NET

Редактировать - Да, я неправильно понимаю .NET. Иногда у меня болит голова.

Спасибо за помощь

...