Можно также использовать связываемое выполнение. Полезный материал, особенно если Вы хотите добавить некоторое текстовое форматирование (цвета, насыщенность шрифта и т.д.).
Вот исходный класс:
Здесь некоторые дополнительные улучшения.
И это - все в одной части кода:
public class BindableRun : Run
{
public static readonly DependencyProperty BoundTextProperty = DependencyProperty.Register("BoundText", typeof(string), typeof(BindableRun), new PropertyMetadata(new PropertyChangedCallback(BindableRun.onBoundTextChanged)));
private static void onBoundTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((Run)d).Text = (string)e.NewValue;
}
public String BoundText
{
get { return (string)GetValue(BoundTextProperty); }
set { SetValue(BoundTextProperty, value); }
}
public BindableRun()
: base()
{
Binding b = new Binding("DataContext");
b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
this.SetBinding(DataContextProperty, b);
}
}
Другой подход - при входе в систему считывать дату / время последнего входа пользователя. запишите и сохраните его в сеансе или в файле cookie сеанса. Затем обновите запись пользователя, указав текущую дату / время. Затем на своих страницах прочтите значение, хранящееся в сеансе / cookie.
Старое время будет удалено по истечении сеанса, что обычно происходит, когда пользователю все равно необходимо повторно войти в систему. Он также имеет преимущество скорости и кеширования, поскольку он читает из сеанса / файла cookie.
Но это зависит от вашей настройки и приложения, возможно ли это для вас.
ОБНОВЛЕНИЕ
Для ясности ... Текущая дата / время сохраняется в таблице пользователей базы данных каждый раз, когда пользователь входит в систему Но до того, как дата / время будут записаны в пользовательскую таблицу, существующее значение считывается и сохраняется в сеансе или cookie. Затем вы обновляете значение даты / времени в таблице пользователей, используя текущую метку времени.
Если ваш билет аутентификации длится дольше, чем сеанс, используйте метод cookie и установите срок действия cookie равным истечению срока действия билета аутентификации.
существующее значение считывается и сохраняется в сеансе или cookie. Затем вы обновляете значение даты / времени в таблице пользователей, используя текущую метку времени.Если ваш билет аутентификации длится дольше, чем сеанс, используйте метод cookie и установите срок действия cookie равным истечению срока действия билета аутентификации.
существующее значение считывается и сохраняется в сеансе или cookie. Затем вы обновляете значение даты / времени в таблице пользователей, используя текущую метку времени.Если ваш билет аутентификации длится дольше, чем сеанс, используйте метод cookie и установите срок действия cookie равным истечению срока действия билета аутентификации.
Есть еще пара способов сделать это ...
Вместо столбца в записи пользователя можно создать отдельную таблицу, в которой регистрируются входы всех пользователей. Это также предоставит вам возможность иметь функцию «показывать последние 5 входов в систему», если важно видеть дату последнего входа в систему, или вести статистику данных входа в систему для последующего отчета. (Это приведет к накоплению данных со временем и, вероятно, потребует какой-то процедуры очистки или сценария расписания.)
В global.asax есть событие Session_End (или что-то в этом роде). Когда пользователь впервые входит в систему, это значение может быть сохранено в переменной сеанса, а затем, когда Session_End запускается, оно записывается в базу данных. Этот метод, вероятно, в конечном итоге вызовет больше странностей, чем он того стоит, так как вы всегда задавались вопросом, что произойдет, если Session_End не t запускается, или если пользователь повторно входит в систему до того, как Session_End запускается для первого входа в систему.
Прошло некоторое время, но было своего рода промежуточное ПО, которое asp.net позволяло наследовать от базового класса и реализовывать код, обрабатывающий предварительные или после начала / окончания сеанса. Я давно не занимался ASP, поэтому я не очень хорошо понимаю это.
Как насчет создания настраиваемого сериализуемого класса, реализующего эту функциональность?
Такой класс можно просто сериализовать / десериализовать как большой двоичный объект для профиля пользователя. Если вам не нужно иметь возможность запрашивать дату последнего входа в систему, это может быть хорошим решением.
Моей первой мыслью было просто использовать Stack
для реализации этого, но хотя это сериализуемый, он не предоставляет ловушек, которые автоматически вытесняют старые значения.