2010-09-30 164 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