页面刷新问题(F5)

时间:2010-11-20 12:30:24

标签: asp.net

我有一个页面,我只有一个TextBox说评论发表评论按钮。

现在,在输入中,用户在“注释”文本框中写入内容并按“发表评论”按钮。无论文本框中写的是什么都存储在数据库中,我用

清除文本框
textbox.text = string.empty statement.

此用户在没有做任何事情的情况下按F5,我已经清除的相同注释再次存储在数据库中。我想跟踪这个事情,当在F5上触发按钮事件时不应该做任何事情。请帮助。

6 个答案:

答案 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;
}