1.this.response.redirect("xxx.aspx");
做完数据处理后,重新定向本页面,也就是重新加载本页面,用户再点刷新时,只是本页面的刷新,不会更新数据库。这个方法比较简单。
2.在网页生成时,在服务器端Application和客户端ViewState设置两个参数,当更新本页面时,校验这两个参数是否一致,一致则为客户端正常请求服务器,不一致则客户端请求无效(如页面刷新,或者数据过期)。
实现代码:
在page_load事件里面
if (!this.IsPostBack) { // 绑定数据 GridView1.DataSource = getData(); GridView1.DataBind(); // 设置本次加载页面的随即数,用于防止刷新,重复更新数据 pageNum = getNumber();//getNumber为生成4位的随机数。 ViewState["pageNum"] = pageNum; // 用application保存,为了防止多个用户更新同一条数据 Application["pageNum"] = pageNum; } else { // 判断客户端变量和服务器变量是否一致,防止刷新。 if (Application["pageNum"].ToString() != ViewState["pageNum"].ToString()) { // 发送客户端脚本,并重新定向到本页面。 ClientScript.RegisterClientScriptBlock(this.GetType(), "messageBox", "<script language='javascript'>alert('数据过期,请重新加载页面!');document.location='frmMonthEnd.aspx';</script>"); } else { // 生成新的校验数据 pageNum = getNumber(); ViewState["pageNum"] = pageNum; Application["pageNum"] = pageNum; } } 在你更新数据库的事件里面写 if (Application["pageNum"].ToString() != ViewState["pageNum"].ToString()) { return; } // 返回一个4位随机数 private string getNumber() { Random rd = new Random(); return Convert.ToString((rd.Next(9) +1)* 1000 + rd.Next(10) * 100 + rd.Next(10) * 10 + rd.Next(10)); } 最后说明下为啥用Application,这种情况是考虑到,当多个用户先后打开本页面,他们都要更新本页面的数据,这个时候需要验证这些用户的验证变量是否与服务器的一致,只有最后一个打开本页面的才可以更新本页面。当然也可以改变一下代码,让所有人都能更新数据,但第一个人更新后,其他人更新时,会提示数据过期,重新加载页面。 if (!this.IsPostBack) { // 绑定数据 GridView1.DataSource = getData(); GridView1.DataBind(); // 设置本次加载页面的随即数,用于防止刷新,重复更新数据 if(Application["pageNum"]==null) { pageNum = getNumber();//getNumber为生成4位的随机数。 ViewState["pageNum"] = pageNum; // 用application保存,为了防止多个用户更新同一条数据 Application["pageNum"] = pageNum; else{ ViewState["pageNum"].ToString()=Application["pageNum"].ToString() ; } else { // 判断客户端变量和服务器变量是否一致,防止刷新。 if (Application["pageNum"].ToString() != ViewState["pageNum"].ToString()) { // 发送客户端脚本,并重新定向到本页面。 ClientScript.RegisterClientScriptBlock(this.GetType(), "messageBox", "<script language='javascript'>alert('数据过期,请重新加载页面!');document.location='frmMonthEnd.aspx';</script>"); } else { // 生成新的校验数据 pageNum = getNumber(); ViewState["pageNum"] = pageNum; Application["pageNum"] = pageNum; } }
|
|
转载于:https://blog.51cto.com/4388109/780277