我有一个页面,我只有一个TextBox说评论和发表评论按钮。
现在,在输入中,用户在“注释”文本框中写入内容并按“发表评论”按钮。无论文本框中写的是什么都存储在数据库中,我用
清除文本框textbox.text = string.empty statement.
此用户在没有做任何事情的情况下按F5,我已经清除的相同注释再次存储在数据库中。我想跟踪这个事情,当在F5上触发按钮事件时不应该做任何事情。请帮助。
答案 0 :(得分:1)
确保您在“发表评论”按钮的事件处理程序上执行数据库插入操作。如果您在Page_Load
中执行此操作,或者在每次呈现页面时由框架调用的其他方法,那么这将导致您看到的重复插入。
答案 1 :(得分:1)
您可能想要阅读 Post/Redirect/Get Pattern
执行数据库提交后,您需要向用户发送重定向,这会导致浏览器发出第二个请求,并在刷新浏览器时消除重复回发的可能性。重定向网址可以是您开始注册的网页,也是其中一项要求。
答案 2 :(得分:0)
插入数据库后,重定向到另一个页面。
答案 3 :(得分:0)
这是浏览器的问题。您单击按钮并将数据保存到按钮处理程序中的数据库中,但是当您点击F5之后,浏览器会询问您(并非所有浏览器都在询问):您是否要发送相同的回发消息?您说是并且浏览器向服务器发送具有相同信息的相同回发。服务器检查此回发并执行“发表评论”操作,您可以再次将信息保存到DB中。
答案 4 :(得分:0)
源代码中有一些示例如何检测页面刷新以避免双重提交
答案 5 :(得分:0)
最简单的解决方案(重定向之后)使用Session变量来计算“回发”的数量:
int postBackCount = (Session["postbacks"] == null) ? 0 : (int)Session["postbacks"];
if (Page.IsPostBack) {
if (postBackCount >= 1) {
lbError.Text = "Can't submit this more than once, sorry";
}
else {
//do DB stuff here.....
}
Session["postbacks"] = postBackCount + 1;
}
else {
Session["postbacks"] = 0;
}