asp.net предотвращает представление формы дважды

У меня есть веб-приложение веб-форм (asp.net 2.0). Когда пользователь отправляет форму, у меня есть отправлять ссылка, на самом деле уходящая, таким образом, они не могут отправить его снова. Однако они могли нажать F5, и это вызывает других, вставляют в базу данных, которую я не хочу иметь, происходят.

Существует ли какая-то установка, которую я могу установить, если/когда они действительно нажимают F5, чтобы сказать, что страница - не отправляет снова?

8
задан d3020 26 March 2010 в 20:37
поделиться

4 ответа

Вы можете попробовать это. Если это не соответствует вашим потребностям, по крайней мере, полезно знать об этом.

Сообщение - Перенаправление - Получить

http://en.wikipedia.org/wiki/Post/Redirect/Get

5
ответ дан 5 December 2019 в 08:51
поделиться

Вы можете сделать несколько вещей. Хранить булево значение в ViewState. Проверить/установить свойство. Хранить булево значение в Session и проверять/устанавливать его.

При postback вы устанавливаете значение и, если значение равно true, предотвращаете отправку и поднимаете/отображаете ошибку.

0
ответ дан 5 December 2019 в 08:51
поделиться

Похоже, вы выполняете обратную передачу на ту же страницу, а затем вставляете ее в базу данных перед повторным отображением той же страницы пользователю без кнопки отправки?

Если это так, самый простой способ обойти вашу проблема заключается в том, чтобы выполнить Response.Redirect () на той же странице - поэтому, когда пользователь нажимает F5, он перезагружает на страницу запрос GET вместо POST.

Объяснение:

Когда вы выполняете обратную передачу в ASP.NET, браузер отправляет на сервер POST-запрос . Я не знаю вашего опыта работы с методами HTTP, но даже если вы новичок в веб-программировании, вы, вероятно, испытали влияние этих типов запросов в браузерах. Иногда, когда вы отправляете формы на веб-сайтах и ​​нажимаете кнопку «Назад», отображается что-то вроде «хотите ли вы повторно отправить данные формы». Это связано с тем, что эти формы отправляют данные на сервер с помощью метода HTTP POST. Эффект кнопки «Назад» в этом случае такой же, как и при нажатии F5 - браузер снова повторяет тот же самый запрос POST (что требует определенного типа данных формы, и в этих случаях это те же данные, которые вы отправили последним время).

При использовании Response.Redirect () сервер выдает код состояния HTTP 302 (ресурс временно перемещен) в ответ на запрос. Затем браузер отправит запрос GET для ресурса, на который ему было велено перенаправить (в данном случае, на ту же самую страницу).

Теперь, когда вы находитесь на странице, она возвращается, как если бы вы перешли на нее по ссылке или набрали ее прямо в адресной строке.Если на этот раз вы нажмете F5, будет выдан запрос GET, а не POST.

Я бы порекомендовал вам скачать Firebug и активировать панель «Сеть». Вы можете точно увидеть, что составляет запрос / ответ, а также список всех запросов, сделанных на вашей странице.

Дополнительные ресурсы:

Если вы любите приключения, вы можете проверить еще больше кодов состояния (и, кстати, я действительно использовал 418 в приложении, над которым работаю, как хак чтобы обойти проверку подлинности с помощью форм для ASP.NET).

Если Firebug недостаточно, вы можете загрузить Fiddler и фактически вручную обрабатывать и воспроизводить запросы по своему вкусу.

Если вам недостаточно GET и POST, вы можете использовать другие методы для изменения состояний в вашем приложении. Возможно, вы слышали об архитектуре RESTful , которая в основном использует HTTP-методы GET, PUT, POST и DELETE, как и предполагалось.

14
ответ дан 5 December 2019 в 08:51
поделиться

Недавно была опубликована статья о Code Project , в которой был представлен способ обработки нежелательных обновлений с помощью HttpModule, скрытого поля и некоторого кода JavaScript. Возможно, это не подходит вам, но это отличное решение, которое не полагается на ViewState или Session.

0
ответ дан 5 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: