Prevent duplicate postback in ASP.Net (C#)

Simple one here... is there a clean way of preventing a user from double-clicking a button in a web form and thus causing duplicate events to fire?

If I had a comment form for example and the user types in "this is my comment" and clicks submit, the comment is shown below... however if they double-click, triple-click or just go nuts on the keyboard they can cause multiple versions to be posted.

Client-side I could quite easily disable the button onclick - but I prefer server-side solutions to things like this :)

Is there a postback timeout per viewstate that can be set for example?

Thanks

7
задан isNaN1247 27 August 2010 в 10:27
поделиться

6 ответов

Я не думаю, что вы должны загружать сервер для таких тривиальных задач. Вы можете попробовать какое-нибудь решение для блокировки пользовательского интерфейса jquery, например это . Инструментарий Microsoft Ajax также должен иметь некоторый контроль, который делает то же самое. Я использовал его давным-давно, но, похоже, не могу вспомнить название элемента управления.

2
ответ дан 7 December 2019 в 12:12
поделиться

Установите переменную сеанса, когда пользователь входит на страницу, например Session["FormXYZSubmitted"]=false. Когда форма отправлена, проверьте эту переменную, например

if((bool) Session["FormXYZSubmitted"] == false) {
   // save to db
   Session["FormXYZSubmitted"] = true;
}
1
ответ дан 7 December 2019 в 12:12
поделиться

Отключите кнопку при нажатии, используйте набор инструментов jquery или microsoft ajax.

0
ответ дан 7 December 2019 в 12:12
поделиться

С помощью jQuery вы можете использовать одно событие.

Еще одно интересное чтение: Создавайте свои страницы ASP.NET на более богатой основе.

2
ответ дан 7 December 2019 в 12:12
поделиться

В зависимости от того, насколько это важно для вас, можно создать массив одноразовых идентификаторов GUID, который вы удалить из массива после обработки обновления (т.е. отправить его обратно в состояние просмотра/скрытое поле)

Если guid отсутствует в массиве при обратной передаче, запрос недействителен.

Замените таблицу базы данных массивом в кластерной среде.

0
ответ дан 7 December 2019 в 12:12
поделиться

У меня был такой же сценарий. Решение одного из моих коллег состояло в том, чтобы реализовать своего рода таймер в Javascript, чтобы не рассматривать второй щелчок как щелчок.

Надеюсь, это поможет,

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

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