C# 回发后刷新会导致再次发送相同的数据

C# 回发后刷新会导致再次发送相同的数据,c#,asp.net,refresh,postback,page-refresh,C#,Asp.net,Refresh,Postback,Page Refresh,我有一个表格可以编辑员工信息。如果用户希望为所选员工输入新的电子邮件地址,则会有一个文本框和一个按钮,上面会显示“添加电子邮件地址”。非常简单,只要输入电子邮件地址,单击“添加电子邮件地址”。它postsback,该按钮的事件处理程序执行对数据库的插入 问题: 如果在回发后按F5刷新页面,则会导致相同的回发,即使文本框为空。换句话说,每次点击F5,事件处理程序中添加电子邮件地址按钮的操作都会再次发生。如果我按F5十次,相同的电子邮件地址会在数据库中显示十次 我发现的一个建议是,“在应用更改后

我有一个表格可以编辑员工信息。如果用户希望为所选员工输入新的电子邮件地址,则会有一个文本框和一个按钮,上面会显示“添加电子邮件地址”。非常简单,只要输入电子邮件地址,单击“添加电子邮件地址”。它postsback,该按钮的事件处理程序执行对数据库的插入


问题: 如果在回发后按F5刷新页面,则会导致相同的回发,即使文本框为空。换句话说,每次点击F5,事件处理程序中添加电子邮件地址按钮的操作都会再次发生。如果我按F5十次,相同的电子邮件地址会在数据库中显示十次


我发现的一个建议是,“在应用更改后,只需重新定向到同一页面。”在我们的案例中,这并不理想的原因是,这是一种相当长的员工数据形式——如果用户对整个表单(如FirstName、LastName等)进行了大量更改,然后在将更改应用到其他地方之前添加电子邮件,如果我们重新定向到同一页面,则其他地方的更改将丢失


我能想到的一个非常冗长的解决方案是,捕获ViewState中的所有数据,将其直接传送到同一页面,然后在URL中使用查询字符串来确定是否要填充ViewState中的数据。在我开始这条路之前,我希望有一种我不知道的方法,比如说PostBackButtontRetainPostBackData()(我知道是一厢情愿的想法)。

在添加电子邮件地址按钮的处理程序中,检查数据库中是否已经存在电子邮件。如果确实如此,请不要再次添加电子邮件并向用户显示适当的消息。通常表单都有一个保留区域,比如一个隐藏的div,以便在出现任何错误时,该div将被错误消息填充并显示给用户

此外,当用户的数据被成功接收和处理时,它将有助于向用户显示确认消息

更新

如果您不想向用户显示任何消息,只需在发现数据库中已经存在该电子邮件后不做任何操作即可。e、 g:

public void AddEmailToDB(string email)
{
    // first find out if the email already exists in the database
    bool isDuplicate = ...; 
    // if it does, simply return and do nothing
    if(isDuplicate) return; 

    // if control reaches here then the email is not
    // a duplicate and you can do your normal processing
}
更新II


如果您不希望浏览器在用户每次回发后按F5键时都显示messagebox,您可以使用AJAX进行部分回发,方法是将电子邮件文本框和add(添加)按钮包装在中,这非常容易使用。

我明白您的意思,实际上我们将检查电子邮件地址是否存在。这仍然会导致每次刷新都出现一个不相关的消息框。我想要的是页面刷新,以刷新页面,而不使用以前的回发数据。@CptSupermrkt,您是指浏览器显示的消息框吗?