在异步回发的更新面板中禁用按钮

Posted

技术标签:

【中文标题】在异步回发的更新面板中禁用按钮【英文标题】:Disable button in update panel on async postback 【发布时间】:2011-04-19 04:38:57 【问题描述】:

我在一个页面上有多个带有各种 asp 按钮的更新面板。我想禁用导致更新面板中回发的按钮,直到它完成。

有没有办法避免为此使用第三方控件?通过 JQuery 或任何其他方法?

【问题讨论】:

你能提供你当前使用的代码吗? 【参考方案1】:

您可以这样做:

cs

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

注意:您可以将“this.disabled = true”替换为 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”

祝你好运!

【讨论】:

非常感谢,我终于想通了。 arg.set_cancel(true); 是什么?在你的代码中做了吗? 另外,如果我在最终请求中使用 postBackElement.disabled=true 。它不会正确解锁它。我们必须改用 document.getElementById() 吗? 您使用的是哪个浏览器和操作系统? "set_cancel" 是为了停止 ajax 请求(检查msdn.microsoft.com/en-us/library/bb386518.aspx)。不适合你? 有没有办法将禁用的按钮周期延迟 2 秒。我试图将它包装在 setTimeout 中,但它没有按预期工作。我使用的是 Windows。【参考方案2】:

您可以使用更新面板的启动和停止消息来禁用您的控件。 例如

<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>

【讨论】:

会在页面上的每个异步回发发泄上触发?有没有办法在某个更新面板内的某个按钮单击事件上触发它? @Popo 您可以通过阅读“发件人”参数进行过滤,并仅在您的某些面板更新时打开它。使用此代码,进行一些调试,然后查看您收到的消息。

以上是关于在异步回发的更新面板中禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章

绑定到更新面板回发的结尾

从更新面板异步回发后保持滚动位置

单击按钮时如何防止下拉列表在更新面板中回发或更新

有没有办法为某些异步回发禁用 UpdateProgress?

在转发器中的按钮 onclick 事件上使用 javascript 导致更新面板中的完整回发

转发器会导致整个页面的回发,即使它位于更新面板内