Привет, У меня есть простой код для вставки данных в db в событие нажатия кнопки. Он выполняет тонкие и вставляет данные в db. После ввода данных, если я нажму кнопку f5, он снова вставляет новую строку в db с одинаковыми значениями.
Событие нажатия кнопки кнопки на каждой кнопке f5 (обновление)
Ват - проблема?
Спасибо, Nagu
Это так же хорошо. Когда вы нажимаете 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 на "полную" страницу, которая дает им обновленную информацию об успехе/неудаче. Если они нажмут обновление, они просто перезагружат завершенную страницу, а не страницу, в которую вставляются/обновляются.
Опять так много разных решений. Ничто не идеально подходит для каждого сценария, поэтому вам нужно будет выяснить, какие из них лучше всего подходят для вас.
Одним из подходов, который вы можете предпринять, является перенаправление веб-браузера после обратной передачи. Это сделает так, что нажатие кнопки обновления или F5 приведет к загрузке новой страницы.
Пример:
protected void button_Click(object sender, EventArgs args)
{
// Insert data, etc.
Response.AddHeader("Location", "DifferentPage.aspx");
}