Как отобразить сообщение Javascript, на основе которого запущен AJAX? - PullRequest
0 голосов
/ 03 апреля 2009

Я пытаюсь выяснить, как отображать «сохраненное» сообщение на экране (с эффектом затухания, любезно предоставленное JQuery) всякий раз, когда вызывается AJAX из элемента управления, который фактически сохраняет форму. Форма относительно сложна и имеет 5 отдельных UpdatePanels, где некоторые - но не все - элементы управления будут выполнять постбэк, который сохранит форму.

Я знаю, какие элементы управления должны вызывать сообщение о сохранении. Однако я не знаю, как определить эти элементы управления, когда запрос AJAX завершен. Я думаю, что мне нужно добавить свою логику в «endRequestHandler» ниже, но я могу ошибаться.

ПЕРЕСМОТР Это то, что я могу использовать на всем моем сайте. Мне нужно придумать общий механизм, чтобы декларативно указывать, что элемент управления должен вызывать отображение «сохраненного» сообщения всякий раз, когда оно является источником постбека. Могу ли я поместить что-то в элемент управления, к которому можно получить доступ в InitializeRequestHandler или EndRequsetHandler (см. Ниже)? Может быть, я должен просто добавить пользовательский атрибут, который я могу найти с помощью JQuery? КОНЕЦ ПЕРЕСМОТРА

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо за помощь!

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

function endRequestHandler(sender, args) {
  //--check to see if the sender should cause the "Saved" message to display
    //--use JQuery Fadeout effect to make the "Saved Message" display on the screen
    //  temporarily
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2009

Чтобы решить эту проблему, я на своей главной странице поместил скрытое поле с id = 'hfSaveMessageText'. Это будет содержать сообщение для отображения, если таковые имеются. Я также поместил диапазон с id = 'mpSaveSpot' и соответствующим стилем на MasterPage. Здесь мои сообщения будут отображаться.

Затем я создал метод на стороне сервера, который принимает System.Web.UI.Page и строковое сообщение для отображения. Метод получает ссылку на скрытое поле на главной странице и устанавливает значение для сообщения, которое передает пользователь (например, «Запись удалена» или «Отправлено по электронной почте»).

Следующий javascript запускается на каждом асинхронном обратном запросе обратной передачи, чтобы увидеть, есть ли сообщение, которое нужно отобразить. Если это так, я отображаю сообщение и исчезаю в течение 4,5 секунд (любезно предоставлено JQuery fadeOut).

//--Get an instance of the PageRequestManager so we can
//  designate an end-request handler
var prm = Sys.WebForms.PageRequestManager.getInstance();
//--designed the displayFadeoutMessage as the end request handler
prm.add_endRequest(displayFadeoutMessage);

function displayFadeoutMessage() {
    //--if there is a message to display then show it
    if ($("#ctl00_hfSaveMessageText").attr("value") != "") {
        //--add a span to the placeholder span and then fade it out 
        //  over 4.5 seconds
        $("#mpSaveSpot").append("<span id='spanFadeoutMessage' style='background-color:#ddd;'>" + $("#ctl00_hfSaveMessageText").attr("value") + "</span>").fadeOut(4500, function() {
                //--once the message is faded out then clear the message hidden
                //  field and clear out the message span
                $("#ctl00_hfSaveMessageText").attr("value", "");
                $("#mpSaveSpot").empty();
        });
    }
}

Теперь у меня есть механизм многократного использования для отображения причудливых сообщений исчезновения на моем сайте, независимо от страницы, на которой я нахожусь. Проблема решена!

0 голосов
/ 03 апреля 2009

Вы можете сохранить, кто сначала сделал вызов ajax, а затем в своем запросе end_request сбросить переменную, в которой вы его сохранили.

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

Редактировать

Вы ответили на свой вопрос. Добавьте пользовательский атрибут в элемент управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...