2010-05-08 39 views
4

這讓我瘋狂!我已經閱讀了至少5個與我的問題密切相關的問題,並且可能僅僅是來自Google搜索的5個或更多頁面。我只是不明白。在更新面板中提交表單後運行javascript?

我想要一個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的頭標記的塊傳遞變量從服務器到客戶端 。

  • 將同一代碼放入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(模態)對話框彈出說嘿它的工作。

回答

2

要從代碼隱藏註冊,here's the format

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

true上月底告訴它來包裝你的代碼<script>標籤,把它關閉如果你想自己做標籤。

+0

@Nick:不知道爲什麼,但註冊異步回發上的JavaScript從來沒有工作給我,除非我使用參數更新面板的類型(UpdatePanel1.GetType()) – 2010-05-08 17:10:29

+0

@Claudio - 取決於它從哪裏被調用,應該從一個參與更新的控件,更新面板本身並不是一個不錯的類型,所以是可行的:) – 2010-05-08 17:12:04

+1

對於具有'UpdatePanels'的頁面,您應該使用'ScriptManager'而不是'ClientScript'。 – lincolnk 2010-05-08 20:11:59

3

您可以檢出endRequest event

​​
+0

那麼我怎麼會通過它像我上面做的變量?我碰到的問題是,在頁面加載時,我在<%= %>中傳遞的變量僅運行一次。任何後續的異步回發可能會運行該代碼,但它不會更新到registrationComplete的最新值。在你的例子中,E是什麼?這一頁?所以在你的例子中,我會在後面的代碼中有一個get_error()函數,它會工作嗎?或者會在Javascript中?如果在Javascript中,我仍然遇到給它更新值的問題。 – AverageJoe719 2010-05-09 20:27:28