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;
            }
        }