Запустить javascript после отправки формы в панели обновления?

Это сводит меня с ума! Я прочитал по крайней мере 5 вопросов здесь, тесно связанных с моей проблемой, и, вероятно, еще 5 или более страниц только из Google. Я просто не понимаю

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

Вот моя панель обновлений:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="upForm" runat="server" 
    UpdateMode="Conditional" ChildrenAsTriggers="False">
    <ContentTemplate>
               'Rest of form'
         <asp:Button ID="btnSubmit" runat="server" Text="Submit" /> 
              <p>Did register Pass? <%= registrationComplete %></p>
    </ContentTemplate>
</asp:UpdatePanel>

Jquery, который я хочу выполнить: (Сейчас это находится в начале разметки, с autoOpen установлен на false)

<script type="text/javascript"> 
function pageLoad() {

    $('#registerComplete').dialog({
        autoOpen: true,
        width: 270,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
          "Ok": function() {
          window.location.href = "someUrl";
        }
        }
    });

}
     </script>

Наконец мой код позади: (прокомментировал все, что я пробовал)

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSubmit.Click     
      'Dim sbScript As New StringBuilder()'
           registrationComplete = True
            registrationUpdatePanel.Update()

            'sbScript.Append("<script language='JavaScript' type='text/javascript'>" + ControlChars.Lf)'
            'sbScript.Append("<!--" + ControlChars.Lf)'
            'sbScript.Append("window.location.reload()" + ControlChars.Lf)'
            'sbScript.Append("// -->" + ControlChars.Lf)'
            'sbScript.Append("</")'
            'sbScript.Append("script>" + ControlChars.Lf)'

            'ScriptManager.RegisterClientScriptBlock(Me.Page, Me.GetType(), "AutoPostBack", sbScript.ToString(), False)'
            'ClientScript.RegisterStartupScript("AutoPostBackScript", sbScript.ToString())'
                            'Response.Write("<script type='text/javascript'>alert('Test')</script>")'
            'Response.Write("<script>windows.location.reload()</script>")'
End Sub

Я пробовал:

  • Передача переменных с сервера на клиент через встроенный <% =%> в блоке javascript тега head.

  • Помещение того же кода в скрипт
    тег внутри панели обновления.

  • Пытался использовать
    RegisterClientScriptBlock и
    RegisterStartupScript

  • Просто делаю Response.Write с тегом script, написанным на нем.

  • Пробовал различные комбинации для помещения всего кода jquery.dialog в скрипт registerstartup, или просто
    пытаясь изменить autoOpen
    собственности, или просто позвонив "открыть" на
    Это.

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

Вот что я знаю:

  • Jquery правильно привязывается даже к асинхронным постбэкам, потому что контейнер div, который является диалоговым окном, всегда невидим, я видел похожий пост, в котором говорится, что это вызывает проблему, но это не так.

  • Использование page_load вместо
    document.ready, так как он должен работать как на асинхронном, так и на нормальном
    постбэки, так что это не проблема.

  • Панель обновления обновляется правильно, потому что <p>Did register Pass? <%= registrationComplete %></p> обновляется до истины после отправки формы.

Так как я могу сделать эту работу? Все, что я хочу, -> нажмите кнопку отправки на панели обновлений -> запустите код на стороне сервера, чтобы проверить форму и вставить в db -> если все прошло успешно, откройте диалоговое окно jquery (модальное), говорящее: "Эй, это сработало".

2 ответа

Решение

Чтобы зарегистрироваться из Codebehind, вот формат:

ClientScript.RegisterStartupScript(GetType(), "AutoPostBackScript", 
                                   "alert('hi');", True);

true в конце говорит обернуть ваш код в <script> теги, оставьте это, если вы хотите сделать теги самостоятельно.

Вы можете оформить событие endRequest:

function pageLoad() {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e) {
        // this function will be executed after the update panel finished 
        // the AJAX request, so here you may open your jQuery dialog

        if (e.get_error()) {

        } else {

        }
    });
}
Другие вопросы по тегам