防止在UpdatePanel内双击LinkBut​​ton

时间:2010-11-30 22:16:35

标签: asp.net updatepanel linkbutton

我在UpdatePanel中有一个LinkBut​​ton,我不希望客户端在UpdatePanel刷新其内容之前多次单击。现在,链接按钮为每个客户端单击启动部分回发,直到更新面板有时间刷新。这个特殊的链接引发了一个非常昂贵的过程,我宁愿不必要地运行它。是否有.NET标准的方法来做到这一点?这是一个很好的解决方案吗?感谢。

5 个答案:

答案 0 :(得分:4)

使用UpdatePanelAnimationExtender。可用于创建良好体验并防止进一步交互,直到更新面板完成。将其与DGH的服务器端布尔值相结合,以防止用户刷新页面并再次提交(将布尔值存储在会话状态中)。

有关UpdatePanelAnimationExtender的更多信息,请访问:

https://github.com/DevExpress/AjaxControlToolkit/wiki/UpdatePanelAnimation

答案 1 :(得分:2)

一种基本方法是记录服务器端或会话变量中最后一次单击的时间。每次单击,检查最后一次单击时间。如果间隔太小,则返回而不开始剩余的过程。

另一种方法是在方法开始时将诸如“active”的布尔值设置为true,并在结束时将其设置为false。在方法开始时,检查该变量的当前状态并采取相应的行动。

这两种方法的主要区别在于,第一种方法允许方法的多个实例同时运行,只要它们以足够长的间隔交错。第二种方法将始终终止或阻止方法的任何新实例,直到当前方法结束。

答案 2 :(得分:1)

我会删除enabled=false,直到部分回发结束,然后删除enabled=false属性。

Page_Load上尝试这样的事情,这样第一次就会被禁用。

button.Attributes.Add("onclick",
                "this.disabled = true;"
                + this.ClientScript.GetPostBackEventReference(button, String.Empty) + ";");

然后在部分回发结束时重新启用它?

答案 3 :(得分:0)

上述解决方案均不适合我。

我所做的是:

function InitializeRequest(sender, args) {
            var oSender = args._postBackElement;
            if (oSender.id == "btnSave") {
                oSender.href = "javascript: void(0);";
            }
        }

function EndRequestHandler(sender, args) {
            var oSender = sender._postBackSettings.sourceElement;
            if (oSender.id == "btnSave") {
                oSender.href = "__doPostBack('" + oSender.id + "', '');";
            }
        }

function load() {
            Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        }

        <body onload="load()">

答案 4 :(得分:0)

在ScriptManager之后的页面上放置以下脚本。

<script type="text/javascript"> 
var postbackControl = null; 
var parm = Sys.WebForms.PageRequestManager.getInstance(); 
parm.add_beginRequest(BeginRequestHandler); 
parm.add_endRequest(EndRequestHandler); 

function BeginRequestHandler(sender, args) 
{ 
postbackControl = args.get_postBackElement(); 
postbackControl.disabled = true; 
} 
function EndRequestHandler(sender, args) 
{ 
postbackControl.disabled = false; 
postbackControl = null; 
} 
</script>