在ASP.Net中刷新页面时重新发送消息

时间:2015-05-10 12:31:33

标签: c# asp.net

我已经为管理员创建了一个发送消息的表单,当我点击发送按钮时,一切都很好,数据被发送并保存到数据库中,我打印成功消息。但是,如果我刷新页面 - 按 F5 - 消息将再次发送到服务器和数据库!我该如何解决这个问题?

我只想在点击发送按钮时向服务器发送消息,而不是在刷新页面上。

我的代码是

<asp:Button ID="btnsenddata" runat="server" OnClientClick="return validate()" OnClick="btnsenddata_Click" Text="SendData" />



        protected void btnsenddata_Click(object sender, EventArgs e)
        {

           //this place i connect to DB

        }

3 个答案:

答案 0 :(得分:0)

我会在按钮上放置一个OnClick处理程序。因此,在您的.asp文件中<asp:Button id="btnMyButton" runat="server" OnClick="btnMyButton_Click"

然后在aspx.cs端添加方法'btnMyButton_Click'并将代码放在那里

btnMyButton_Click(object sender, EventArgs e)
{
   //your code to update database goes here
}

答案 1 :(得分:0)

您可能需要在数据库中提出一些方法,以确保在一段时间内不会发送重复的消息。你不能轻易解决F5问题,因为所有这一切都告诉浏览器重复上次完成的内容。这意味着将相同的数据发送给用户。这就是诀窍,您输入的任何检查都必须将数据存储在服务器中,因为客户端只会重放上一个操作。

你可以保存一个会话变量,让你知道用户最后发送这个表单的时间(确保在检查会话变量时检查Session [&#34; sentform&#34;]!= null)

此外,您可以在数据库中创建一个简单的日志来说明用户点击了什么(如果您已登录用户),上次发送的时间以及可以识别哪个页面,消息请求者被触发的内容。然后,您可以询问数据库该用户是否在过去几分钟内发送了页面/进程X的消息并返回true或false。

答案 2 :(得分:0)

这是一个共同的问题。行为是设计的:信息 按下的按钮实际上被重新发送到服务器(以及所有 页面刷新时的其他控件信息。 我在网上冲浪时发现的一种很好的解决方法是(这种方式在服务器端)使用HashTable:

//Class member   
HashTable ht = new HashTable();

btnMyButton_Click(object sender, EventArgs e)
{
      ht =(Hashtable)Application["UserOKHashtable"]
      if ((ht.ContainsKey(Session["UserSessionKey"]))            
        {
          // double - clicked or user pressed refresh
          return;
        }
        else
        {
         (ht.Add(Session["UserSessionKey"],UserName);
        // your code here
        // and finally
        ((Hashtable)Application["UserOKHashtable"])
         .Remove(Session["UserSessionKey"]);
        }
       }

请记住最后从哈希表中删除用户的会话密钥 程序,否则用户只能点击 在整个会议期间按钮一次。

如果您搜索&#34;阻止双重帖子&#34;,您会找到更多信息和可能的解决方法。

希望它能帮助:)