Как я могу обновить веб-страницу без повторной отправки информации? - PullRequest
1 голос
/ 15 марта 2011

У меня есть приложение asp.net, и когда я обновляю веб-страницу, которая создается после отправки формы.

Пример:

<form name="myform" action="mypage.aspx" method="post">

, затем отображается следующее предупреждение.

"Невозможно обновить страницу без повторной отправки информации. Нажмите Повторить, чтобыОтправьте информацию еще раз или нажмите Отмена, чтобы вернуться на страницу, которую вы пытались просмотреть. "

С двумя кнопками:

Повторить Отмена

Как можно избежать вышеуказанного предупреждения и принять «Отмена» в качестве значения по умолчанию и немедленно обновить?

Спасибо

Джефф

Ответы [ 4 ]

6 голосов
/ 15 марта 2011

Вы должны использовать шаблон «Redirect-After-Post».Google для получения дополнительной информации.Но в основном при отправке формы ваш сервер отправляет ответ перенаправления клиенту, который затем выбирает эту страницу.Это лучший способ избежать проблемы, с которой вы сталкиваетесь: вы не получаете это раздражающее сообщение при обновлении страницы, кнопка «Назад» не «сломана» и предотвращает случайную двойную отправку.Действительно каждая форма на вашем сайте должна реализовывать этот шаблон.

Вот пара вопросов по реализации этого в asp.net:

Как использовать ASP.NET с шаблоном «Redirect after POST»?[Отредактировано]

Перенаправление после публикации в ASP.NET MVC

1 голос
/ 15 марта 2011

Джеф,

У меня вчера была такая же проблема с многостраничной формой (4 отдельных шага). В итоге я создал файл «обработчик» и использовал его для обработки опубликованных данных, а затем произвел перенаправление на нужную мне страницу. Это устраняет проблему «повторной отправки», поскольку данные когда-либо публикуются только на странице, посвященной их обработке.

Моя HTML-форма:

<form action="handler.asp" method="post">
    <input type="text" name="firstName" />
    <input type="submit" value="Send Data" />
    <input type="hidden" name="action" value="displayName" />
</form>

В моем handler.asp:

<%

    if Request.Form("action") = "displayName" Then

        ' Do whatever is needed here.
        ' After you're done
        ' Send the user where you want them to go

        Response.Redirect("default.asp?status=thanks")

    End If

%>

Надеюсь, это полезно. Удачи

1 голос
/ 15 марта 2011

Джефф,

Чтобы расширить вышеприведенные комментарии:

Либо переключите

method="post"

на:

method="get"

...или сделайте это вручную, таким образом, чтобы не поставить под угрозу безопасность ваших данных.

Допустим, у вас есть логин с двумя текстовыми полями user / pass.Вы можете создать структуру / класс с этой информацией, а затем сгенерировать случайный GUID.

сделать что-то вроде:

Session[GUID] = new MyPostInformationClass() {login = txtLogin.Text, pass = txtPass.Text};

, а затем:

Response.Redirect("mypage.aspx?guid=" + GUID);

затемна Page_Load:

MyPostInformationClass usr = (MyPostInformationClass)Session[GUID];
String login = usr.login;
String pass = usr.pass;

Конечно, это слишком упрощенный пример;но вы можете F5 ваше желание сердца.

1 голос
/ 15 марта 2011

Как я уже упоминал в комментарии, вы можете сохранить последнюю отправку в переменной (например, в сеансе), а затем использовать перенаправление для повторного посещения страницы. Классическое «обновление» просто выполняет последний вариант, так что теперь способ «обновить без отправки».

Но, в зависимости от того, чего вы пытаетесь достичь, вы также можете использовать UpdatePanel и «Обновить» страницу (или, для всех целей и задач, сделать так, чтобы она выглядела как обновленная) .

РЕДАКТИРОВАТЬ: Если пользователь нажимает клавишу F5, затем запретите это действие (если это необходимо). Выполните все необходимые действия при первом посещении страницы, а затем автоматически перенаправьте их на страницу «Результат». Таким образом, любое обновление просто обновляет «статическую» (уже созданную / выполненную действие) страницу.

...