2010-09-30 165 views
2

我有多個更新面板與單個頁面上的各種ASP按鈕。我想禁用導致在更新面板中回發的按鈕,直到它完成。禁用更新面板上的異步回發按鈕

有沒有辦法避免使用第三方控制?通過JQuery或其他方法?

+0

你能提供你正在使用的當前代碼嗎? – NAVEED 2010-09-30 06:13:10

回答

5

你可以這樣做:

CS

//in pageload 
//the request is not in postback or async mode 
bt1.OnClientClick = "this.disabled = true; " + ClientScript.GetPostBackEventReference(bt1, null) + ";"); 

注:可以更換 「this.disabled =真」,一個js函數,將有更好的處理來禁用按鈕,並且可能還會顯示友好的信息。


或者這樣:

http://msdn.microsoft.com/en-us/library/bb383989.aspx

JS

Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(CheckStatus); 
function CheckStatus(sender, arg) 
{ 
    var postBackElement = arg.get_postBackElement(); 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    if (prm.get_isInAsyncPostBack() && postBackElement.id == "btn1") { 
     arg.set_cancel(true); 
     //display friendly message, etc 
    } 
} 

注:我修改它,所以它會檢查按鈕的ID。替換「btn1」

祝你好運!

+0

非常感謝,我終於明白了。什麼arg.set_cancel(true);在你的代碼中做過? – 2010-09-30 10:47:26

+0

另外,如果我在結束請求中使用postBackElement.disabled = true。它並沒有適當地解除封鎖。我們必須使用document.getElementById()嗎? – 2010-09-30 11:13:13

+0

您使用哪種瀏覽器和操作系統? – Mouhannad 2010-09-30 11:16:27

4

您可以使用更新面板的開始和停止消息來禁用您的控件。 例如

<script type="text/javascript"> 
var prm = Sys.WebForms.PageRequestManager.getInstance();  
prm.add_initializeRequest(InitializeRequest); 
prm.add_endRequest(EndRequest); 

function InitializeRequest(sender, args) { 
    document.getElementById("ButtonToDisable").disabled = true; 
} 

function EndRequest(sender, args) { 
    document.getElementById("ButtonToDisable").disabled = false; 
} 
</script> 
+0

這將觸發頁面上的每個異步回發點?有沒有辦法在某個更新面板中的某個按鈕點擊事件上觸發它? – 2010-09-30 07:06:17

+0

@Popo您可以通過閱讀「發件人」參數進行過濾,並且只有在某些面板正在更新時纔打開它。使用此代碼,進行一些調試並查看您到達的消息。 – Aristos 2010-09-30 07:47:18

+0

非常感謝Aristos。 – 2010-09-30 10:41:40