2009-11-04 74 views
1

我有一個DIV,我有一個基於數據的信息放在這個div中的asp:repeater。然後,我使用Jquery的UI對話框通過點擊按鈕將數據顯示給用戶。這一切都適用於游泳。UpdatePanel中的Jquery UI對話框做奇怪的事情

所以,我想能夠添加記錄到填充中繼器的數據。我有另一部分屏幕,人們可以輸入這些數據,並使用ajax調用將其保存到數據庫。這也是很有效的。

然後我想更新我的對話框中的數據,而不必完整回發到服務器。所以,這通常很容易。我把我的div放入UpdatePanel,並從Jquery啓動__doPostBack。然後刷新數據,這些數據也可以在一定程度上適用。

一旦__doPostBack完成,該div不再隱藏。它現在顯示在我的頁面上(更新的數據在意你),但是我用來顯示對話框的JavaScript現在不再有效。

一些調查顯示:

  1. 在頁面初始加載,它告訴jQuery來創建一個div對話框中的JavaScript邁出不管它是窗體上的DIV,並將其追加到身體元素。
  2. 當更新面板回發時,div被重新創建,但將其轉換爲對話框的javascript不會再次執行(我可以理解......我們還沒有完成頁面的全部加載,所以javascript的犯規再次執行
  3. 這意味着股利不再是「對話」,但我的網頁上一個簡單的div,這不是我想要的

所以,我的問題是是。:

有沒有一種注入javascript aftr的updatepanels回發,它會執行並正確地創建對話框?

+0

除非__doPostBack(或updatepanels)可以調用自定義函數,否則我看不出如何做到這一點。 –

+0

我們可以看到這樣的代碼嗎? –

+1

我已經解決了這個問題。我不使用updatepanel刷新網格的內容,而是通過ajax調用返回HTML,並在插入完成後設置div的innerhtml。運作良好,無需更新面板。 – tardomatic

回答

1

該解決方案將不會使用UpdatePanel,只需更改div的innerHTML與通過jquery ajax調用收到的數據。

+0

謝謝,正如你在我的評論中看到的那樣,這正是我最終做的。 – tardomatic

1

我找到了另一個解決方案。我將對話框初始化JavaScript放在一個名爲SetupDialog的獨立函數中,而不是位於$(function() { });塊內。

然後我在Page_Load中使用ScriptManager.RegisterStartupScript註冊腳本,以便它運行每次更新面板的更新:

ScriptManager.RegisterStartupScript(this, GetType(), "SetupDialog", "SetupDialog();", true); 

在這種情況下,在UpdatePanel更新後,對話框將只工作。如果您在此之前需要對話框,那麼您也可以在$(function() { });塊內調用SetupDialog。