我可以看到,我自己和很多人在ASP.NET中这两个项目都遇到了麻烦...刷新按钮,后退按钮......(我看到很多人都去问过如何在浏览器中禁用这两个按钮..)
现在在页面中实现两个更多的布尔变量有什么问题(IsRefresh,IsPostBack)......如果这些问题可以被规避和实施,那对开发人员来说将是一笔巨大的资产......
当您回答时,如果您还可以在Web应用程序中包含您正在采取的步骤,以避免在有用的情况下重新发布(有时在数据库中).
谢谢
实现两个额外的布尔属性的问题是,确实没有(可靠的)方法来区分Back/ Refresh触发请求.当点击这些按钮时,浏览器将:
您正在遇到案例#2.当第二请求时,服务器将收到的确切因为它与原始请求做相同的请求的数据.因此,ASP.NET(和大多数其他框架)将处理请求,就像处理原始请求一样.有几种方法可以解决此问题:
ViewState),其中包含预期回发的页面上的唯一值.然后添加一些数据结构以保留"已使用"值的列表,以及在执行任何关键操作之前测试重复项的逻辑.POST请求永远不会在浏览器历史记录中结束.解决方案#3很简单,几乎适用于所有情况.基本上,不是将结果/确认作为对"关键"回发的回复而返回,而是重定向到新的URL:
protected void btnCritical_Click(object sender, EventArgs e)
{
DoSomethingThatShouldNotBeDoneTwice();
Response.Redirect("confirmation.aspx");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |