.net,c#语言开发BS页面,页面重新加载前或跳转前,连续点击提交按钮,造成数据重复输入的问题

.net,c#语言开发BS页面,如何在不能使JS和session,cookie的情况下避免页面重新加载前或跳转前,连续点击提交按钮,造成数据重复输入的问题
问题它是在重新加载之前连续点击提交啊,IsPostBack还没有到再次判断的时候啊。后台已做重复信息验证,后台用的是commandBuilder自动产生的SQL语句,没有存储过程,那个重复提交是在插入数据库前,因为时间很短多条数据同时插入数据库,所以来不及验证啊。

这个问题很简单,核心只要能区分提交内容是否重复就可以了。
典型的可选方案有三:
1.使用Redirect进行重定向,还可以利用js函数location.href和location.replace进行跳转;
2.方法一无法避免用户点击”后退“按钮,即浏览器历史记录里面依然有提交的表单记录,使用上述方法跳转后依然可以通过后退回到原来的页面,可以操作http协议的pragma和Cache-Control来控制客户端的缓存,是浏览器不缓存http请求数据;
3.操作http协议并不能确保使用自动化程序重复提交,因为http协议控制的是客户端,很容易绕过,还需要需要根据自身业务特点来进行验证,如加上验证码,如限制用户多长时间内不能再次提交(比较一下当前时间和用户最后一次提交的时间就行了),如检查表单中的唯一项(有些系统要求同一用户发布的文章标题必须不同,就可以通过检查该提交的标题是否存在来确定是否重复提交)
如果你的需求是想提高安全性和减少重复内容,安全性方面要注意不要信任客户端,想减少重复内容也有很多其他方法,就以这里的知道系统为例,可以在用户输入问题的时候在旁边用ajax加载相关的问题,引导用户先查看相关问题的解答,如果用户找到了答案就不用提问了追问

我就想在前台,页面重新加载完成之前,连续点击提交按钮只提交一次

追答

多动动脑筋,我写的任何一个方法应该都能解决你的问题,没人能精确到每行代码的告诉你,自己多去想想,不要只看到按钮提交,多关注一下客户端和服务器端的交互。如果你赶时间,后台操作完成后跳转一下就可以了,这是最简单的方法,或者也可以让提交按钮灰显。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-29
这么跟你说吧,不适用不能使JS,那么你的代码就要在服务器端运行。(其实是可以用JS在客户端,让按钮点一次就失效的,不知道楼主为什么不用)

也可以用session存储这个提交的ID,然后再次提交的时候和这个id对比。但是楼主也不用。。。
cookie和session类似

如果以上都不能用,那就只能在插入数据的时候限制了,但是这个是效率和效果都最差的,每个页面都给他一个ID,数据库插入的时候提示ID重复就行。追问

因为我做的是手机网页,有些低端手机是不支持JS和session的,我只想在前台限制呢?

第2个回答  2011-04-30
LZ的问题没说明白,
1 假如“重新加载”是指客户端接收到页面,这个应该是控制客户端脚本,和服务器端没有什么关系。你是想让用户等待页面加载完成后再操作。
2 服务器处理响应的速度(由于某种原因)很慢,比连续两次点击页面按钮的时间还长,以至于某些状态值尚未来得及修改。这样必须控制会话;要么就想法减少响应时间;或者先将用户导航到一个不能操作的界面,让他等待。
第3个回答  2011-04-29
用隐藏控件吧 比如默认值为0<input type="hidden" id="hd" name="hd" value="0" runat="server"/>
提交事件(){
if(hd.value.ToString()=="0")
{
提交的方法();
}
提交事件里面重新把hd.value="1";
}

这是手写的伪代码 可能有错 但思路是一样的 希望能帮助你追问

这个我试过了,我用的System.Threading.Thread.Sleep(3000); 做的模拟测试,它在赋值为1之前就连续点击多次了。

追答

这个你前台肯定要验证的啊 还有你重新赋值的时候 肯定要写在你执行的方法后面,如果前台输入不正确 难道你也要他执行提交后台? 不会吧

追问

我就想在前台,页面重新加载完成之前,连续点击提交按钮只提交一次

第4个回答  2011-04-29
Question:
There is a Button1 in Page1. And Button1 just be excuted once After Page_load or Button_Click.
--------------------------------------------------------------------------------------------------
Solution:
Page_Load()
{
this.Button1.Enable=true; // if the Page have been loaded... Button1 Enable...
}
--------------------------------------------------------------------------------------------------------------------
Button1_Click(sender, e)
{
// logical code....
this.Button1.Enable=false; // After Submit,Button1 Disable...
}
------------------------------------------------------------------------------------------------------------------
May ,helpful...

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网