ASP.Net刷新页面再次发送电子邮件

时间:2011-02-11 13:57:41

标签: asp.net session refresh

当有人提交表单时,我有一个向我发送电子邮件的页面,如果用户刷新页面,则会重新发送电子邮件,这显然不太理想。

我知道阻止这种情况发生的唯一方法是使用Session并说

If Not Session("blah") = "Y" Then
    'Send e-mail and set Session
End If

我试图不使用Sessions,如果我可以帮助它,所以我只是想知道如果用户刷新但没有Sessions或重定向到另一个页面,是否有办法不再发送电子邮件?

由于

6 个答案:

答案 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)