Sys.Application.add_load Проблема с модальным расширителем всплывающих окон - PullRequest
3 голосов
/ 12 февраля 2009

У меня есть текущая проблема, давайте объясним контекст раньше:

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

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

Сначала я попытался назвать это так:

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "ShowModalPopup(""" & Me.formModalButton.ID & """);", True)

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

var modal = $find('myModal');

Итак, я нашел другой способ, и он работает почти отлично.

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowModalPopup(""" & Me.formModalButton.ID & """)};", True)

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

Пример: у меня есть другое модальное всплывающее окно для удаления данных, когда я нажимаю на кнопку, появляются оба модальных окна, что не круто.

Кто-нибудь знает, как это исправить или как лучше это сделать?

P.S. Я не вызываю модальное всплывающее окно на стороне сервера, потому что на странице существует функция javascript, поэтому я не хочу создавать копию этой функции в RegisterStartupScript.

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2009

Наконец-то я нашел решение для моей текущей проблемы.

Я все еще использую ClientScript.Resgister [...], но на этот раз я также изменил функцию OnClientClick Javascript моей кнопки отмены.

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

Я также думаю, что проблема может существовать из-за другой панели обновлений в моем коде, но мне нужно, чтобы она работала с Modal Popup Extender.

В любом случае, я обнаружил, что он работает даже не в Opera и Safari, а в целом (Ajax Control toolkit - Модальный всплывающий расширитель).

Это шанс, что компания здесь не заботится о других и официально поддерживает только IE. В моем случае я хочу, чтобы это работало, по крайней мере, в FF и Chrome.

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """)});", True)
                btnCancel.OnClientClick = "resetDefaultValue();__doPostBack('" & btnCancel.ID & "','onclick')"

Итак, есть код, также в FF появляется другая ошибка,

Sys.WebForms.PageRequestManagerServerErrorException: неизвестная ошибка произошла при обработке запроса на сервере. Код состояния, возвращаемый с сервера: 0

И я нашел для этого этот workarounf, он не самый лучший, но я потерял достаточно времени с этим ...

ClientScript.RegisterStartupScript(Page.GetType(), "WorkAroundFF", "Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest); function endRequest(sender, args) { /* Check to see if there's an error on this request.*/ if (args.get_error() != undefined) { $get('Error').style.visibility = ""visible""; /* Let the framework know that the error is handled, so it doesn't throw the JavaScript*/ alert. args.set_errorHandled(true); } }", True)

Итак, спасибо за помощь, Рамеш, я уверен, что ваше решение будет работать, если бы не мои Панели обновления.

Надеюсь, что это может помочь кому-то еще.

2 голосов
/ 12 февраля 2009

Используйте приведенный ниже фрагмент кода

//Declares gloabal variable
ClientScript.RegisterStartupScript(Page.GetType(),"vardeclaration","var reloadModal;",true);

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(

function() 
{
   reloadModal = function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """);};
   Sys.Application.add_init(reloadModal);
}
);", True)

Это позволит вам использовать

function cancelClick()
{
   Sys.application.remove_init(reloadModal);
}
...