[英]Run javascript after form submission in update panel?
這真讓我抓狂! 我已經閱讀了至少5個與我的問題密切相關的問題,並且可能只有5個左右的網頁來自谷歌搜索。 我只是不明白。
我試圖在用戶填寫表格“注冊提交”然后重定向到另一個頁面后出現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
我試過了:
通過head標記的javascript塊中的內聯<%=%>將變量從服務器傳遞到客戶端。
將相同的代碼放在腳本中
updatePanel中的標記。
試圖使用
RegisterClientScriptBlock和
的RegisterStartupScript
只需使用寫在其中的腳本標記執行Response.Write。
嘗試將整個jquery.dialog代碼放在registerstartup腳本中的各種組合,或者只是
試圖改變autoOpen
財產,或只是打電話給“開放”
它。
我甚至無法得到一個簡單的警報來處理任何這些,所以我做錯了但我只是不知道它是什么。
這就是我所知道的:
即使在異步回發上,Jquery也能正確綁定,因為作為對話框的div容器總是不可見的,我在這里看到一個類似的帖子,說明這引起了問題,這不是這里的情況。
使用page_load而不是
document.ready,因為它應該在異步和普通上運行
回發,所以這不是問題。
更新面板正在正確更新,因為<p>Did register Pass? <%= registrationComplete %></p>
提交表單后, <p>Did register Pass? <%= registrationComplete %></p>
更新為true。
那我怎么能做這個呢? 我想要的只是 - >單擊更新面板中的提交按鈕 - >運行服務器端代碼以驗證表單並插入到數據庫 - >如果一切都成功,請彈出jquery(模態)對話框,說它嘿工作。
您可以簽出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 {
}
});
}
要從Codebehind注冊, 這里是格式 :
ClientScript.RegisterStartupScript(GetType(), "AutoPostBackScript",
"alert('hi');", True);
最后的true
告訴它將你的代碼包裝在<script>
標簽中,如果你想自己做標簽就把它關掉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.