因为有些数据是允许重复的,但用户在提交表单后按刷新就会重复提交数据,即所谓的“刷新重复提交”的问题。禁止“刷新”是不现实的,禁的了键盘鼠标禁不了浏览器上的按钮;保存后跳转到其他页面,用户可以通过后退和再刷新回到刚才的页面。我想理想的情况是不能通过后退回到提交的页面。
我的方法不是很复杂,2步:
1、先在Page_Load里加入
- // 使后退时页面过期
- Response.Expires = 0;
- Response.CacheControl = "no-cache";
- if (!IsPostBack)
- {
- ViewState["s"] = Guid.NewGuid().ToString("N"); // 每打开一个页面一个GUID,防止session冲突
- Session[ViewState["s"].ToString()] = "zorroncn"; // session值自定义
- }
- else // 刷新或PostBack时
- {
- if (Session[ViewState["s"].ToString()] == null)
- Response.Redirect("~/default.aspx"); // 想跳转的页面
- }
2、然后在保存按钮的_Click里加入
- // if保存成功时
- {
- Session.Remove(ViewState["s"].ToString()); // 保存成功去掉此session
- Response.Redirect("~/default.aspx"); // 想跳转的页面
- }
跳转后如再后退,则显示页面已过期;再点刷新时因此session已不存在,则会跳转到其他页面。旧页面都无法浏览到,就更不怕重复提交数据了。
此方法的问题是用到了session,当不点保存返回时,此session没有Remove,可能比较浪费资源。如还有其他bug,请指教。