У нас есть приложение. NET MVC. В нем есть плагин Unobtrusive Validation и пользовательский валидатор для диапазонов дат.
Imports System.ComponentModel.DataAnnotations
Public Class DateRangeAttribute
Inherits ValidationAttribute
Implements IClientValidatable, IMetadataAware
'[redacted for brevity]
Public Sub New(minDate As String, maxDate As String, minDateRelativeDays As Integer, maxDateRelativeDays As Integer)
MyBase.New(DefaultErrorMessage)
If minDate = String.Empty Then
Me.MinDate = Today
Else
Me.MinDate = ParseDate(minDate)
End If
If maxDate = String.Empty Then
Me.MaxDate = Today
Else
Me.MaxDate = ParseDate(maxDate)
End If
Me.MinDate = Me.MinDate.AddDays(minDateRelativeDays)
Me.MaxDate = Me.MaxDate.AddDays(maxDateRelativeDays)
End Sub
'[redacted for brevity]
Проверка используется путем добавления соответствующего украшения к свойству в модели
<Display(name:="Completed date"), DateRange("2000/01/01", Nothing, 0, 0), DisplayFormat(DataFormatString:="{0:dd/MMM/yyyy}", ApplyFormatInEditMode:=True)>
В этом случае, поскольку «Nothing» передается параметру maxDate
, будет установлено значение Today
. Это прекрасно работает, оно не позволит вам указать дату, более позднюю, чем «Сегодня», за исключением того, что в конце дня не будет «refre sh», если только пул приложений IIS не будет переработан. Когда пул приложений продолжает работать с одного дня на следующий, проверка диапазона дат завершается неудачей, поскольку он считает, что Today
все еще вчера. Это происходит на стороне клиента и на стороне сервера. Мы не используем кеширование вывода и не делаем ничего для явного кеширования результата валидатора.
Он действует так, как будто кеширует, что такое Today
, но это кажется совершенно неправильным. Мы ввели обходной путь, чтобы принудительно перезапустить пул приложений в полночь, что уменьшило проблему, но все равно не имеет смысла для меня.