Обнаружение конфликтов ASP.NET в административной системе - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь реализовать обнаружение конфликтов в системе администратора, т.е. Алиса редактирует страницу;Боб редактирует ту же страницу и сохраняет перед Алисой.Чтобы Алиса не перезаписывала изменения Боба, мне нужно, чтобы она знала, что произошло изменение, и какие поля она будет перезаписывать, и как Боб их сохранил.(Это все с использованием SQL).

Я пытался сохранить соответствующий объект в Page_Load, но он исчезает, когда страница отправляется обратно.Есть ли способ сохранить объект без необходимости писать неприятный код сериализации?Или действительно лучший способ сделать это.

1 Ответ

2 голосов
/ 01 марта 2012

Если объект не очень сложный, просто пометьте его как [Serializable] и поместите его в ViewState или SessionState, тогда он выдержит обратные передачи (хотя, если вы поместите его в ViewState, вам нужно будет вернуть его в viewstate послеобратная передача, перед тем, как страница будет снова отображена).

Другой вариант, если объект немного сложен, или вы действительно не хотите сохранять эти данные, убедитесь, что в рассматриваемой таблице есть поля вдольстроки LastUpdated и LastUpdatedBy, и убедитесь, что они записываются при каждом обновлении.Тогда, что вы можете сделать, это при рендеринге страницы Алисы записать дату LastUpdated в скрытое поле (или viewstate).

Затем при попытке сохранения сравните запись в LastUpdated базы данных с той, которая былаприкреплен, когда страница была отображена.Если они одинаковы, продолжайте обновление.Если они разные, у вас есть значения, которые Алиса хотела ввести, если вы их получили с обратной передачи, и у вас есть изменения Боба от выполнения проверки даты.Затем вы можете отобразить любой пользовательский интерфейс из этого.

РЕДАКТИРОВАТЬ: некоторые другие параметры, если вы хотите показать исходные значения, которые Алиса имела при загрузке страницы.

Первый, самый низкий технический будетиметь HiddenField, соответствующее каждому редактируемому полю.Вы загружаете их одновременно с заполнением элементов управления, а затем используете их для отображения исходных значений.

Другой вариант, если вы используете ObjectDataSource, - использовать его функцию ConflictDetection: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.conflictdetection.aspx

Между этим и свойством OldValuesParameterFormatString элемент управления затем передает исходные значения в функцию Update, а также обновленные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...