C# 防止在ASP.NET Webforms中过度发布
我知道这是一个基本问题,但我很好奇不同的选择是什么,最佳做法是什么 如果我有一个负责将预订保存到系统中的表单,如果用户很快点击两次按钮,我如何防止表单被发布两次 我知道有几种方法可以做到这一点,但我不太确定哪种方法是防止这种情况发生的标准方法。部分原因是我不熟悉web表单,并且习惯于处理MVCC# 防止在ASP.NET Webforms中过度发布,c#,asp.net,webforms,C#,Asp.net,Webforms,我知道这是一个基本问题,但我很好奇不同的选择是什么,最佳做法是什么 如果我有一个负责将预订保存到系统中的表单,如果用户很快点击两次按钮,我如何防止表单被发布两次 我知道有几种方法可以做到这一点,但我不太确定哪种方法是防止这种情况发生的标准方法。部分原因是我不熟悉web表单,并且习惯于处理MVC 提前感谢。简单方法-使用ajax AnimationXtender控件 只需将扩展器连接到按钮并添加一个禁用操作。我建议使用一个客户端onClick事件处理程序来禁用按钮或使其不可见,最好是后者,并将按钮
提前感谢。简单方法-使用ajax AnimationXtender控件
只需将扩展器连接到按钮并添加一个禁用操作。我建议使用一个客户端onClick事件处理程序来禁用按钮或使其不可见,最好是后者,并将按钮替换为一个标签,上面写着“Processing…”或类似的内容。我使用了两种方法来解决此问题:
在使用
asp:Button
提交时,我一直在使用类似的方法:
1) 设置提交按钮的使用submitbehavior=“false”
2) 设置提交按钮的OnClientClick=“plesewait(这是“请等待…”);”
3) 在页面中包含javascript代码:
function pleaseWait(obj, message) {
if (typeof(Page_ClientValidate) == 'function') {
if (Page_ClientValidate()) {
obj.disabled = true;
obj.value = message;
return true;
}
}
return false;
}
这个解决方案很好,因为它很简单,但仍然考虑客户端javascript验证。它并不完美,因为它仍然依赖于Javascript,Javascript可以关闭,但这不太可能由没有意识单击一次并等待响应的人来完成。:)
<asp:Button ID="CopyScenarioButton" ClientIDMode="Static" OnClick="CopyScenarioButton_Click"
OnClientClick="setTimeout( function() {$('#CopyScenarioButton').attr('disabled', 'disabled');},0)"
EnableViewState="false" Text="Save New Scenario" ToolTip="Save New Scenario"
CssClass="btnNormal" runat="server" />
function PreSaveHybrid() {
var doSave = PreSave();
if (doSave !== false) //returns nothing if it's not a cancel
setTimeout(function () { $('#btnSave').attr('disabled', 'disabled'); }, 0);
return doSave;
}