积极答复者
带参数的页面转向新页面,防止重复提交

问题
-
有页面A.aspx里,
有一个链接<a href="B.aspx?ID=1">指向B页面</a>
在B.aspx页面代码里:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{if(Request.QueryString["ID"]!=null)
{
对数据进行操作
}
}}
发现这样写完之后,在B.aspx的页面里"刷新"该页面,它会对"数据进行重复操作"
求解:怎么做才能让B.aspx页点击"刷新"时,不要对数据进行重复操作.谢谢.
- 已移动 Bob Shen 2012年5月11日 6:33 (发件人:Visual C#)
答案
-
你好,可以考虑一下设计的问题。
B.aspx?ID=2,如果是这样的URL,那么表示要发送的是一个GET请求。作为一个GET请求,那么实际上应该是向服务器获取一个资源。一般用来读取数据库的内容。如果要更新数据库,那么应该发送一个POST请求。
浏览器发生一个POST请求之后,如果刷新,那么浏览器会提醒你表单可能重复提交了。所以一般而言,发生一个POST请求之后需要让浏览器转向,可以转向到同一个页面,也可以是其他页面。这样用户再点击刷新就不会重复提交数据了。
在你的情况里,可以考虑点击B.aspx?ID=2之后,等完成了数据库更新,再转到C.aspx或者A.aspx页面,防止重新提交。
- 已标记为答案 阿波 2012年5月16日 13:45
全部回复
-
刷新的事情解决了,
但后退该页面之后,
再<a href="B.aspx?ID=2">指向B页面</a>进行数据提交,,好像数据列加不上去了,
在B.aspx页面代码里:
public static DataTable Cpdt;//购物车的数据列对象
protected void Page_Load(object sender, EventArgs e)
{if (Session["CPBY"] == null)
{
Creatbt();
Session["CPBY"] = Cpdt;
}
else
{
Cpdt =(DataTable)Session["CPBY"];
}if (!Page.IsPostBack&&Request.QueryString["ID"]!=null&& Session["isfirst"] == null)
{添加购物车的数据列对象
Cpdt.Rows.Add(Myrow);
Session["isfirst"] = true;
}
GridView1.DataSource = Cpdt;
GridView1.DataBind();}
- 已编辑 阿波 2012年5月5日 3:39
-
-
你好,可以考虑一下设计的问题。
B.aspx?ID=2,如果是这样的URL,那么表示要发送的是一个GET请求。作为一个GET请求,那么实际上应该是向服务器获取一个资源。一般用来读取数据库的内容。如果要更新数据库,那么应该发送一个POST请求。
浏览器发生一个POST请求之后,如果刷新,那么浏览器会提醒你表单可能重复提交了。所以一般而言,发生一个POST请求之后需要让浏览器转向,可以转向到同一个页面,也可以是其他页面。这样用户再点击刷新就不会重复提交数据了。
在你的情况里,可以考虑点击B.aspx?ID=2之后,等完成了数据库更新,再转到C.aspx或者A.aspx页面,防止重新提交。
- 已标记为答案 阿波 2012年5月16日 13:45