2008-10-03 2 views
3

Я создал пользовательский элемент управления для обработки комментариев к определенным бизнес-объектам, таким как контакты и клиенты. Прекрасно работает ... кроме одного вопроса.AJAX, postbacks и обновления браузера

Я использую элемент управления ListView для редактирования и удаления комментариев и отдельной области на одном элементе управления пользователя, чтобы добавить новый комментарий. Все это завернуто в UpdatePanel.

Screenshot

Вот мой сценарий ... пользователь добавляет новый комментарий ... страница делает обратную передачу, данные успешно сохранены, и управления ListView обновляется, чтобы показать новый комментарий. Теперь, если пользователь обновит в браузере, он, естественно, отправит обратно и добавит еще одну повторяющуюся запись.

Любые идеи о том, как лучше всего предотвратить это?

+0

Как вы добавляете новый комментарий? Это часть обработчика событий кнопки «Добавить комментарий»? – EndangeredMassa 2008-10-03 16:49:06

+0

Да ... все это работает ... но если пользователь нажмет кнопку обновления в своем браузере, он добавит еще одну запись. – mattruma 2008-10-03 16:52:08

+0

Есть хорошая статья на эту тему [здесь] (http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh.all). – ballpointpeon 2008-10-03 16:54:13

ответ

4

Вы можете попробовать использовать Post/Redirect/Get шаблон. В принципе, вместо того, чтобы позволить postback отправлять данные, перенаправляйте на страницу. Таким образом, если пользователь обновляется, он/она обновляет команду GET, а не POST.


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

0

Я не использовал ASP.NET в течение нескольких лет, но вы должны обернуть «сделать это на постбэка» код в Page.IsPostBack:

if(IsPostBack) { 
    //do your data-saving code... 
} 

MSDN link

Смежные вопросы