簡體   English   中英

在更新面板中提交表單后運行javascript?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM