当有人提交表单时,我有一个向我发送电子邮件的页面,如果用户刷新页面,则会重新发送电子邮件,这显然不太理想。
我知道阻止这种情况发生的唯一方法是使用Session
并说
If Not Session("blah") = "Y" Then
'Send e-mail and set Session
End If
我试图不使用Sessions,如果我可以帮助它,所以我只是想知道如果用户刷新但没有Sessions
或重定向到另一个页面,是否有办法不再发送电子邮件?
由于
答案 0 :(得分:4)
查看 Post-Redirect-Get方法,这在网络应用程序中非常常见。许多人认为你不应该真正从POST返回内容 - 只是“成功/失败”。 GET应返回内容,因此POST应发出重定向以获取另一页。
//handle postback & send email
Response.Redirect("~/feedback.aspx");
答案 1 :(得分:1)
如果电子邮件是通过回发发送的,只需重定向到另一个页面(或同一页面)即可。只要您不停留在同一页面上,刷新就会停止发送重复的回发。
答案 2 :(得分:1)
当您完成发送电子邮件时,Tyr将Response.Redirect(“YourPage.aspx”)调用到同一页面。
答案 3 :(得分:0)
请改用页面的ViewState。在页面中添加SentMail
布尔属性,并在发送电子邮件时将其设置为true。然后,您可以查看If Not SentMail Then SendMail()
。
Public Property SentMail() As Boolean
Get
If ViewState("SentMail") IsNot Nothing Then
Return Convert.ToBoolean(ViewState("SentMail"))
Else
Return False
End If
End Get
Set(ByVal value as Boolean)
ViewState("SentMail") = value
End Set
End Property
编辑:您可以做的一件事是在页面的If Not IsPostBack
事件中检查Page_Load
并将属性初始化为false。然后,唯一应该将属性设置为True的事件将是实际执行邮件发送的方法:
Protected Sub btnSendMail_Click(ByVal sender as Object, ByVal e as EventArgs) Handles btnSendMail.Click
If Not SentMail Then
' Code to do the sending
SentMail = True
End If
End Sub
你可以使它更高级一点,以便除了发送电子邮件之外,如果你需要通过将其他非视图状态标记耦合到它SentEmailThisPostBack
以便某些类型的重置,页面仍然可以使用可以根据一组业务规则执行此值,甚至可以将UI调整为所有用户输入以执行重置。
答案 4 :(得分:0)
问题的解决方案是
假设我有一个功能
private void btn_delete_click(object Sender, System.EvenArgs e)
{
//logic to perform on button click
// In order to reflect the changes on the current page write
Page.Response.Redirect(Page.Request.Url.ToString(), false);
}
现在点击F5 ............按钮事件不会被解雇
希望它会对你有所帮助。
答案 5 :(得分:0)