Я допускаю некоторую проблему обратной передачи при использовании GetPostBackEventReference . Вот сценарий :
У меня есть всплывающее диалоговое окно модального javascript, и я получил кнопку в этом модальном диалоге, которая использовалась для выбора вещей (это НЕ элемент управления asp: button)
При нажатии кнопки HTML этого диалогового окна javascript он вызовет вызов веб-службы MS AJAX с помощью метода javascript: eval () . И этот вызов веб-службы MS AJAX генерируется динамически. Итак, код такой:
var serviceCall = svcCall + "(" + parameters + ")"; //dynamically generate the MS AJAX web service call here
eval(serviceCall);
//use eval to trigger the MS AJAX web service call
Как вы все знаете, после завершения веб-службы MS AJAX вы можете определить функцию обратного вызова для обработки завершения:
function OnComplete(result, userContext, methodName) {
//force to call postback manually
eval($(userContext[0]).val());
//close the javascript dialog here
}
Как я уже упоминал ранее, вызов веб-службы MS AJAX создается динамически, и когда вызов веб-службы MS AJAX является конструктивным, он будет передавать userContext, который содержит значение обратной передачи (т. Е. " __ doPostBack (' ctl00 $ ContentPlaceHolder1 $ btnSelectUser ',' ')", поэтому, когда вызывается javascript eval () , он имитирует обратную передачу по нажатию кнопки asp:.
userContext [0] в основном содержит идентификатор клиента скрытого поля asp: hidden, а значение скрытого поля задается во время события Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
btnSelectUser.ValidationGroup = "popupSelect";
btnSelectUser.CausesValidation = false;
this.hdnBtnPostback.Value = Page.ClientScript.GetPostBackEventReference(btnSelectUser, string.Empty, false);
}
Как вы можете видеть, вот как я связал событие Click кнопки asp: (т.е. btnSelectUser) с скрытым полем asp: с помощью GetPostBackEventReference и установил registerForEventValidation аргумент в ложь. Я также пытался использовать другую ValidationGroup и установить CausesValidation в false , но без надежды. (
В итоге, я связал нажатие кнопки asp: PostBackEventReference (т.е. __doPostback (....)) с атрибутом Value поля asp: hidden и используя javascript eval () для оценки этого скрытого поля значение для ручного запуска обратной передачи.
p.s. btnSelectUser является элементом управления asp: button и используется для вызова модального диалогового окна javascript.
Хорошо, вот проблема:
На той же странице есть некоторый asp: validator, например и, конечно же, когда страница сталкивается с ошибкой, этот валидатор и выноска будут отображаться для пользователя. например Когда пользователь ничего не заполнил и не отправил форму, ValidatorCalloutExtender отобразит баллон и сообщит пользователю. Представьте себе, что один из этих ballon / validatorCalloutExtender выходит на верх вашего экрана в данный момент.
Затем вы щелкаете btnSelectUser (asp: кнопка), чтобы отобразить модальное диалоговое окно javascript, и в диалоговом окне вы добавляете несколько пользователей, и после нажатия кнопки SELECT в этом модальном диалоговом окне веб-служба MS AJAX запускается как как было упомянуто выше, и после завершения этого веб-сервиса, он оценивает значение поля asp: hidden (т. е. __doPostback (...)) ...... и выполняет обратную передачу вручную.
Однако из-за отображения баллона validatorCalloutExtender он каким-то образом не может инициировать обратную передачу таким образом, но когда я закрываю ballon / validatorCalloutExtender, ручная обратная передача с использованием eval () просто работает нормально. Еще более странным является то, что при отображении баллона первый раз, когда я нажимаю кнопку SELECT в этом модальном диалоговом окне, он не запускает обратную передачу, однако, если я делаю то же самое снова (т. Е. Открываю диалог javascript и выберите некоторых пользователей, затем снова нажмите кнопку SELECT). Он может выполнять ручную обратную передачу .... и я не понимаю, почему первый раз не работает.
Это действительно сводит меня с ума, надеюсь, кто-нибудь здесь может помочь, будет очень признателен. Большое вам спасибо, ребята. :)
Хорошего дня. Будем рады услышать от вас все в ближайшее время.