请求转发下刷新页面重复提交原因_如何防止刷新页面重复提交数据的问题

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", "");

}

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", "");

}

else

{

// 生成新的校验数据

pageNum = getNumber();

ViewState["pageNum"] = pageNum;

Application["pageNum"] = pageNum;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值