Запустить 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 {
}
});
}