У меня есть .aspx страница, что страница вставляет данные в базу данных по нажатию кнопки. Но когда я нажимаю кнопку, она идет право. Я добираюсь Успешно сообщение как "успешно вставленные данные". В этой ситуации, если я нажимаю "F5" или обновляю страницу, это запускает событие нажатия кнопки. Почему это должно быть? Как избежать этого условия?
Когда пользователь нажимает F5 (или использует кнопку панели инструментов для обновления страницы). Это привести к новому запросу, идентично предыдущему , быть отправленным на сервер. Кнопка Event
будет поднята , но у вас есть несколько способов защитить себя от вставки данных дважды.
Лучший способ, ИМХО, состоит в том, чтобы использовать Post / Redirect / Get Pattern . В вашем коде сразу после того, как данные сохраняются, выполните перенаправление на 302 на страницу подтверждения:
protected void btnSaveStuff_Click(object sender, EventArgs e)
{
SaveStuffToDatabase();
Response.Redirect("confirmation.aspx");
}
При использовании шаблона Post
на исходную страницу не будет в конечном итоге в браузере История и освежающие страницы результатов вызовут финал , чтобы повторяться
, которое должно быть безопасным.
Обновление повторно отправьте форму, которую вы опубликовали в прошлый раз, когда вы нажали кнопку.
Обычно, когда вы обновляете страницу, вы думаете о том, чтобы снова получить страницу, или делать HTTP Get, но поскольку последнее, что вы имели пост (при нажатии кнопки отправки), браузер снова выполнит пост попытка вызвать тот же ответ.
Я предлагаю использовать Post / Redirect / Get Pattern, как предложено Йорн Шуу-рода .
Эта статья также кажется актуальной. http://aspalliance.com/687_preventing_duplate_record_insertion_on_page_refresh