Поддержка отмены веб-приложения ASP.net - PullRequest
4 голосов
/ 02 октября 2008

У меня есть простая веб-форма с несколькими полями и сеткой. У меня также есть кнопка сохранить и отменить.

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

Я думал о сохранении изменений в gridview в viewstate, но я бы предпочел не из-за необходимости дополнительного места.

Я также подумал о временной таблице, которая будет хранить изменения, а затем откатывать их по мере необходимости.

У кого-нибудь есть идеи, как получить функциональность отмены из формы?

Ответы [ 4 ]

2 голосов
/ 02 октября 2008

Сохраните все данные в объекте сеанса и запишите их в базу данных, когда будете готовы. Если вы абстрагируете свой слой данных, вы можете использовать ObjectDataSource, который взаимодействует с объектами сеанса.

В настоящее время я использую этот метод в системе оформления заказов для сайта электронной коммерции. Я храню данные в пользовательских объектах, которые имитируют схему базы данных.

1 голос
/ 02 октября 2008

Самое простое решение - не фиксировать изменения в виде сетки в базе данных, пока пользователь не нажмет кнопку «Сохранить».

Если вы решили использовать viewstate или что-то подобное для записи изменений, которые вы позже отмените, не забудьте принять те же меры предосторожности при обновлении коллизий, что и при первоначальных изменениях.

0 голосов
/ 02 октября 2008

Хммм ... загрузить объект (ы) данных в сессию и связать ваши элементы управления с (MyObject)Session["MyObject"] объектами. Я полагаю, что вы можете подключиться к ObjectDataSource для использования сеанса ... затем вы можете переопределить события Update, чтобы изменения записывались в сеанс.

Когда пользователь нажимает кнопку Сохранить, возьмите объекты сеанса и сохраните их: MyObject obj = (MyObject)Session["MyObject"]; MyObject.Save()

Это не даст вам несколько уровней отмены ... хотя я думаю, вы можете сохранить несколько объектов сеанса, если вам действительно нужно.

0 голосов
/ 02 октября 2008

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

...