Если объект не очень сложный, просто пометьте его как [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, а также обновленные значения.