btnAdd_Click срабатывает, когда я нажимаю F5

2

Привет, У меня есть простой код для вставки данных в db в событие нажатия кнопки. Он выполняет тонкие и вставляет данные в db. После ввода данных, если я нажму кнопку f5, он снова вставляет новую строку в db с одинаковыми значениями.

Событие нажатия кнопки кнопки на каждой кнопке f5 (обновление)

Ват - проблема?

Спасибо, Nagu

Теги:

2 ответа

2
Лучший ответ

Это так же хорошо. Когда вы нажимаете F5, вы переделываете то, что вы только что сделали, это была обратная передача. Чтобы этого избежать, у вас есть бесконечное количество решений, таких как:

Используйте переменную сеанса при начальной загрузке, и как только она будет отправлена ​​в первый раз (сохранена), очистите значение. Убедитесь, что вы проверяете наличие этого значения.

// On inital page load for data entry store a key.
// This is a basic example, you should have a session wrapper
Session["Unsaved"] = 1;

// When you do the save logic make sure you check this session variable and save if
// it still exists.
if (Session["Unsaved"] != null)
{
  // Save data here
  Session.Remove("Unsaved");
}
else
{
  // Show message that save has already completed or session has expired.
}

Вы также можете выполнить проверку на стороне БД и убедиться, что вы не вставляете идентичные данные (что может не работать, поскольку оно может быть действительным в вашем сценарии)

В прошлом я запретил это с редактированием, например, путем хранения номера ревизии и предоставления ему номера версии с опубликованными данными. При сохранении, если номера версий не совпадают (поскольку он изменяется с каждым обновлением, а проверка выполняется стороной БД), обновление не выполняется, и я бы отображал сообщение.

Для новых данных вы также можете сделать Response.Redirect на "полную" страницу, которая дает им обновленную информацию об успехе/неудаче. Если они нажмут обновление, они просто перезагружат завершенную страницу, а не страницу, в которую вставляются/обновляются.

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

  • 0
    Привет, спасибо за ваш быстрый ответ, и это единственное решение для решения этой проблемы? или есть какой-нибудь лучший подход?
  • 0
    F5 - это команда браузера, которая сообщает браузеру обновить страницу. В этом случае это означает повторную отправку вашего постбэка. Если вы переопределите это поведение, вы нарушите стандартные функции браузера, которые ожидают пользователи. Это большое нет-нет в мире дизайна пользовательского интерфейса.
1

Одним из подходов, который вы можете предпринять, является перенаправление веб-браузера после обратной передачи. Это сделает так, что нажатие кнопки обновления или F5 приведет к загрузке новой страницы.

Пример:

protected void button_Click(object sender, EventArgs args)
{
    // Insert data, etc.

    Response.AddHeader("Location", "DifferentPage.aspx");
}
  • 0
    или Response.Redirect обратно на ту же страницу. Нажатие на F5 просто снова ПОЛУЧИТ страницу и не перезапустит постбэк.
  • 0
    Перенаправление на одну и ту же страницу обычно не позволяет вам давать какое-либо подтверждение / сообщение об успехе или неудаче без специального кодирования, ищущего что-то, поэтому обычно для сохранения этой функции используется новая страница.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню