Страница обновления ASP.Net снова отправляет электронную почту - PullRequest
2 голосов
/ 11 февраля 2011

У меня есть страница, которая отправляет мне электронное письмо, когда кто-то отправляет форму, и если пользователь обновляет страницу, он повторно отправляет электронное письмо, что, очевидно, не идеально.

единственный способ остановить это - использовать Session и сказать

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

Я пытаюсь не использовать сеансы, если могу помочь, поэтому я просто подумал, есть ли способ неотправить письмо снова, если пользователь обновляется, но без Sessions или перенаправления на другую страницу?

Спасибо

Ответы [ 6 ]

4 голосов
/ 11 февраля 2011

Посмотрите на Post-Redirect-Get подход , очень распространенный в веб-приложениях. Многие утверждают, что вы не должны возвращать контент из POST - просто «успех / неудача». GET должен возвращать содержимое, поэтому POST должен выполнить перенаправление для получения другой страницы.

//handle postback & send email
Response.Redirect("~/feedback.aspx");
1 голос
/ 11 февраля 2011

Tyr вызывает Response.Redirect ("YourPage.aspx") на той же странице, когда вы закончите отправку электронной почты.

1 голос
/ 11 февраля 2011

Если электронное письмо отправлено на postback , просто перенаправьте на другую страницу (или ту же страницу).Пока вы не останетесь на той же странице, обновление прекратит посылать дубликаты постбэков.

0 голосов
/ 11 февраля 2011

Вы можете попытаться заставить страницу истечь.

http://www.netnewsgroups.net/aspnet/t275-page-caching-help-needed.aspx

0 голосов
/ 11 февраля 2011

Решение проблемы:

допустим, у меня есть функция

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 ............ событие не будет запущено

Надеюсь, это поможет вам.

0 голосов
/ 11 февраля 2011

Вместо этого используйте 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, чтобы выполнить некоторый сброс этого значение может быть выполнено в соответствии с набором бизнес-правил или даже настроить пользовательский интерфейс для всех вводимых пользователем данных для выполнения сброса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...