Принудительная обратная передача из кода позади? Или перезагрузить JavaScript из асинхронной обратной передачи? - PullRequest
0 голосов
/ 08 мая 2010

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

JavaScript не перезагружается при асинхронной обратной передаче. Это означает, что когда форма успешна, и я изменяю переменную formSubmitPass на true, она не передается в Javascript через <% = formSubmitPass%>. Если я добавлю триггер к кнопке отправки, чтобы выполнить полную обратную передачу, это сработает. Однако я не хочу, чтобы кнопка отправки выполняла полную обратную передачу, как я уже сказал, чтобы я мог проверить форму на панели обновлений.

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

Javascript:

    var formSubmitPass = '<%= formSubmitPass %>';
var redirectUrl = '<%= redirectUrl %>';

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 5000);
        }
    });

    if(formSubmitPass == 'True')
    {
        $('#formPassBox').dialog({
            autoOpen: true
        });
    }

Итак, как я могу форсировать обратную передачу из кода, или перезагружать JavaScript на асинхронной обратной передаче, или сделать так, чтобы я мог продолжать выполнять проверку формы асинхронно?

Редактировать: я изменяю formSubmitPass в самом конце кода:

If errorCount = 0 Then
            formSubmitPass = True
            upForm.Update()
        Else
            formSubmitPass = False
        End If

Таким образом, при полной обратной передаче значение действительно меняется.

Ответы [ 3 ]

2 голосов
/ 08 мая 2010

Мне кажется, что HTML заменяется панелью обновлений, а ваши селекторы jQuery не привязаны к новым элементам.

Попробуйте использовать .Live для всех своих событий или выполнить повторную привязку после обновления ajax (для этого можно использовать плагин UpdatePanel )

0 голосов
/ 11 мая 2010

Я понял, что для меня сработало, сначала поместив javascript для диалога в page_load, чтобы свойство auto open было установлено в false, например, так:

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false
     });
}

Затем создайте совершенно отдельную функцию, например:

function formSubmitPass() {
    $('#formPassBox').dialog({
        autoOpen: true,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 10000);
        }
    });
}

Затем используйте RegisterStartupScript, как указано в следующих вопросах: Запускать javascript после отправки формы на панели обновления? и Что не так с ScriptManager.RegisterStartupScript?

Мой код:

ScriptManager.RegisterStartupScript(Me, upForm.GetType(), "AutoPostBackScript", "formSubmitPass();", True)

ПРИМЕЧАНИЕ: Убедитесь, что вы используете ScriptManager NOT ClientScript, а для второго параметра используйте GetType () на панели обновления.

Вместо использования строителя строк ( Эффективное использование метода ASP.NET RegisterStartupScript ) для кода, который, как мне показалось, было бы неудобно помещать в код javaScript, я просто делаю отдельную функцию и назвал это, который работал отлично

0 голосов
/ 08 мая 2010

Не совсем уверен, что вы пытаетесь сделать. <%= formSubmitPass %>, конечно, не будет пересматриваться, потому что это серверная переменная, которая устанавливается только при перезагрузке страницы. Даже если вы снова выполните javascript, значение не изменится.

Однако вы также можете передать обратный вызов succes методу .dialog():

$('#formPassBox').dialog({
  // ...
  success: function(){ 
    // do something, e.g.
    $("#formPassBox").dialog({autoOpen:false});
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...