2009-08-16 60 views
5

在我的網頁我有以下的用戶控件:ASP.NET用戶控件和jQuery對話框

<div class="editFormDialog" style="display: none; font-size: 12px;"> 
    <mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" /> 
</div> 

這UC具有公共屬性,可以取一個數據集,並更新UC某些字段。

因此,當我按下我的頁面上的按鈕時,它會在UC上調用此屬性,並且UC會使用DataSet中的數據進行更新。

到目前爲止這麼好。當我想讓UC成爲一個jQuery UI對話框時,問題就出現了。

首先我創建對話框:

$(document).ready(function() { 
    $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 700, 
     width: 780, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
      $(this).css('display', 'block'); 
     } 
    }); 
}); 

我wan't它在按鈕按下打開(這不是一個ASP.NET按鈕,純HTML):

$('#btnEdit').live('click', function() { 
    $('.editFormDialog').dialog('open'); 
}); 

該對話框打開,但UC沒有包含正確的數據。 當頁面加載時,UC用默認數據更新。然後用戶點擊一個按鈕,數據改變但UC不更新。它仍然包含默認數據。那就是問題所在。

你知道爲什麼嗎?

幫助將非常感謝!

回答

1

當您「致電房產」時(我認爲您的意思是一種方法),究竟會發生什麼?該頁面是否執行回發?如果是這樣的話,那麼當您將jQuery混合到場景中時,回發可能會被阻止?

+0

我點擊一個按鈕來獲取下一個數據。回發發生。 UC中的屬性設置爲「editUC.EditData = ds;」。該頁面提供了新的數據。現在,當我點擊另一個使對話框彈出的按鈕時,UC仍然包含默認數據。就像它沒有在其數據源中註冊更改一樣。但是如果我在對話框外面顯示UC,它可以很好地工作。 – 2009-08-16 12:16:21

+0

這聽起來很奇怪:你能發佈一些更多的源代碼嗎? – 2009-08-16 12:50:35

+0

它全部放置在更新面板中。是否可以在創建對話框時將其「移出」更新面板?也許另一種解決方案可能是在每次打開對話框時創建對話框,然後在關閉對話框時將其刪除?當然,將html元素放在正確的位置。但我該怎麼做? – 2009-08-16 13:34:53

0

由於您使用的是更新面板,您是如何將呼叫注入頁面中的javascript的?我問,因爲只有一種方法可以在部分回傳中正常工作:ScriptManager.RegisterStartupScript()。這允許javascript代碼充當頁面被加載。當然,也可能會調用其他onload javascript,這可能會導致您看到的行爲。

所以,

  1. 確保你的JavaScript被注入腳本管理器。
  2. 確保只有你想要一個局部回傳後執行 被 執行

的JavaScript代碼,還擁有一個Web服務把你的UC在AJAX控件來改變數據源的可能性。沒有更多的部分回傳,通常會提高頁面的響應速度。

2

我發現了這個問題的解決方案。事實證明,當你追加到形式,你需要確保該段代碼是jQuery的文檔內準備:

$("#dialog1").parent().appendTo($("form:first")); 

所以,整個事情應該是這樣的:

jQuery(document).ready(function() { 
    $("#<%=myFamilyGrid.ClientID %>").tablesorter({ 
     sortList: [[0, 1]] 
    }) 
     .tablesorterPager({ container: $("#pager") }); 


    $("#dialog1").dialog({ 
     modal: true, 
     height: 370, 
     width: "350px", 
     autoOpen: false, 
     bgiframe: false, 
     zIndex: 3999 
    }); 

    $("#dialog1").parent().appendTo($("form:first")); 
}); 

希望這有助於!