我有一些控件继承自ASP.NET buttons
并使用onserverclick
.
如果用户单击两次,则该按钮会触发两个服务器端事件。我怎样才能防止这种情况?
我尝试通过javascriptthis.disabled='true'
在点击后(在onclick
属性中)进行设置,但这也阻止了第一次回发。
我有一些控件继承自ASP.NET buttons
并使用onserverclick
.
如果用户单击两次,则该按钮会触发两个服务器端事件。我怎样才能防止这种情况?
我尝试通过javascriptthis.disabled='true'
在点击后(在onclick
属性中)进行设置,但这也阻止了第一次回发。
请参阅此示例以禁用对回发的控制。它应该可以帮助您完成您想要实现的目标。
http://encosia.com/2007/04/17/disable-a-button-control-during-postback/
您不一定要在回发时显示禁用的按钮。您要确保他们不会意外提交两次。因此,由于服务器端操作而禁用或隐藏按钮已经为时已晚。至此,第二个请求已经在进行中。您需要使用 javascript 或确保您的服务器端代码不会运行两次。
对于 FormView-Template 中的更新面板和按钮,我使用以下方法:
<script type="text/javascript">
// Using that prm reference, hook _initializeRequest
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);
// Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
function InitializeRequestBuchung(sender, args) {
var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];
// Get a reference to the PageRequestManager.
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
args.set_cancel(true);
}
}
</script>
如果当前异步回发仍处于活动状态,这将取消后续回发。完美运行。
几天前有人在这里的某个地方说过这个,我同意 - 使用 javascript 来简单地隐藏按钮而不是禁用它;您可以在其位置显示“微调器”图像,让用户知道发生了什么。
我所做的不是隐藏,而是使用 javascript 交换按钮。单击第一个按钮时显示另一个灰色图像。
将 Button 属性 UseSubmitBehavior 设置为 false。然后创建一个禁用按钮的 OnClientClick 函数。它看起来像这样:
<script type="text/javascript">
function disableFunctn(button){
button.disabled = true;
}
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>
最快最便宜的方式:
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>
您也可以尝试例如 btnSave.Enable = false; 当按钮被点击并且在 Click Event 例程中完成按钮处理之前。如果您需要重置它以使其启用,请使用单独的按钮重置按钮以供重用。
另一种方法是设置带有验证的按钮,以便询问用户是否要保存,它应该会弹出两次。
另一种方法是标记第一次出现,然后为第二次设置弹出窗口以验证第二次或后续使用。