如何防止重复的回发混淆我的业务层

Sis*_*utl 6 asp.net duplicate-data form-submit

我有一个带有传统3层设计的Web应用程序(ASP.Net 3.5).如果用户单击按钮发生回发,则会运行一些中间和数据层代码,并刷新屏幕.如果用户在第一次回发完成之前多次单击该按钮,则我的逻辑会混淆,并且应用程序可能最终处于无效状态.防止这种情况的最佳方法是什么?

我可以使用javascript来禁用按钮,但这只是隐藏了问题.如何构建业务和数据层来处理这个问题?

cle*_*tus 2

三种最流行的方法(经常串联使用)是:

  1. 单击/按下后禁用提交按钮;
  2. 使用POST+REDIRECT+GET避免后退按钮问题;和
  3. 替换浏览器中的历史记录,这样您就无法返回(但这应该谨慎使用,并且有充分的理由)。