最近考虑了一个问题:假设当前一个用户在留言本提交留言。要求:提交操作结束后仍然显示本页,如果提交成功,那么要显示出提示信息和此次提交的留言。如果提交失败,那么显示操作失败的信息。
想了一会,没想到什么好的方案。去网上搜了一下,关键字为:aspnet 重复提交 。
发现网上讨论得很激烈。随便看了几个网页,主要是看了csdn上的。发现没什么好的方案。有的方案太长,直接没心思看下去。
打算自己想一个简单易行的方案。
想了一会,找到一个比较可行的方案(如果各位有更好的方案,本着开发人员的奉献精神,请更贴哈!)。
思路如下:
1.当用户的操作经过客户端的验证到达服务器端后。执行到按钮的点击事件中。首先将按钮设置为不可用。
2.执行一系列的操作。比如这里是插入数据库。
3.将数据库操作的结果保存在一个string变量中。
4.重新定向到本页,并且在地址后面加上查询字符串。类似:
string details = "数据库操作结果"; Response.Redirect(Request.RawUrl + "?result="+details);
5.在本页的页面加载事件中,获取这个字符串,并且执行相应的提示操作。类似:
this.lblDetails=Request.QueryString["result"];
======华丽的分割线==========================
在写上面的方法的时候,想到一个问题。
在第4步中,将这个结构加入地址信息的时候,要判断此地址中是不是已经有了其他附加信息(类似:test.aspx?city=nanjing&date=20110813&...),如果是的话,那么拼接本次结果信息的时候,拼接符号应该为"&"。而且还存在一个问题,如果附加信息本来就很长了,那么要考虑这个长度问题了。
所以,有了如下方法:
前3步都一样。
4.将查询结果存放进viewstate中。类型:
ViewState["result"] = "数据库操作结果"; Response.Redirect(Request.RawUrl);
5.在本页的页面加载事件中,获取这个字符串,并且执行相应的提示操作。类似:
this.lblDetails = ViewState["result"].ToString();
以上仅为本人思路,如有不对,请多指教。