我是通过按钮来插入数据的
- C# code
protected void Button1_Click1(object sender, EventArgs e) { if (TextBox1.Text != "" && TextBox2.Text != "") { if (SqlStore.insert_youqing(TextBox1.Text, TextBox2.Text) == 0) { GridView1.DataBind(); TextBox1.Text = ""; TextBox2.Text = ""; } } }
用IsPostBack该怎么写?
或者是别的方法?
------解决方案--------------------------------------------------------
用AJAX,或者你自己提交后禁用按钮,或者提交成功跳转到别的页面,或者是提交后清空输入内容。
------解决方案--------------------------------------------------------
从“技术”上是不可能“防止”的。因为“刷新”操作是许多浏览器的特性,都是可以重复提交前一个请求。
要想防止,那么你要在数据处理业务逻辑上去防止。也就是说接受“客户端会重复提交数据”的这个事实,然后用后台数据处理流程来防止。
例如在聊天中,假设一个人刚刚已经在邀请另外一个人了,那么重复发送邀请时你要么就忽略它,要么就告诉用户“已经邀请过了”这就行了,而不用真的发出两次邀请。
只有很少的情况下,简单的业务逻辑判断可能不足,那么你可以写一个“时间戳”标记。例如你可以每一次输出界面时先在ViewState中记录一个随机编号,然后把它记录到后台文件或者数据库中。然后在SqlStore.insert_youqing执行之前,首先核对ViewState中的标记跟数据库中的标记是否一致,不一致就说明用户很可能是使用“刷新”来提交的。
最后要知道,假设你使用UpdatePanel控件,完全可以避免“刷新”时重复提交的问题。