Проверка даты с помощью проверки подлинности ASP.NET
Я пытаюсь использовать ASP.NET RangeValidator
для проверки даты в текстовом поле. Формат даты, введенной в текстовое поле, составляет dd MMMM yyyy
.
Как я могу использовать средство проверки диапазона для проверки допустимой даты? Если я введу 1 января 1000 в качестве минимального или максимального значения, я получаю сообщение об ошибке, значение которого не может быть преобразовано в дату ввода, но если я использую другой формат, он будет считать мой введенный текст недействительным.
Ниже мой код:
<asp:TextBox
runat="server"
ID="txtDatecompleted"
/>
<cc2:CalendarExtender
ID="datecompletedExtender"
runat="server"
TargetControlID="txtDatecompleted"
Format="dd MMMM yyyy"
/>
<asp:RangeValidator
runat="server"
ID="RangeValidator1"
Type="Date"
ControlToValidate="txtDatecompleted"
MaximumValue="9999/12/28"
MinimumValue="1000/12/28"
ErrorMessage="enter valid date"
Display="None"
/>
<cc2:ValidatorCalloutExtender
ID="RangeValidator1_ValidatorCalloutExtender"
runat="server"
Enabled="True"
TargetControlID="RangeValidator1">
</cc2:ValidatorCalloutExtender>
Ответы
Ответ 1
Лучший вариант:
Добавьте валидатор сравнения в веб-форму. Установите его controlToValidate. Установите для свойства Type значение Date. Задайте его свойство оператора DataTypeCheck, например:
<asp:CompareValidator
id="dateValidator" runat="server"
Type="Date"
Operator="DataTypeCheck"
ControlToValidate="txtDatecompleted"
ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>
Ответ 2
Здесь также будет работать CustomValidator:
<asp:CustomValidator runat="server"
ID="valDateRange"
ControlToValidate="txtDatecompleted"
onservervalidate="valDateRange_ServerValidate"
ErrorMessage="enter valid date" />
Code-за:
protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args)
{
DateTime minDate = DateTime.Parse("1000/12/28");
DateTime maxDate = DateTime.Parse("9999/12/28");
DateTime dt;
args.IsValid = (DateTime.TryParse(args.Value, out dt)
&& dt <= maxDate
&& dt >= minDate);
}
Ответ 3
Я думаю, что это самый простой способ сделать это.
<asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox>
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator>
Ответ 4
Я считаю, что даты должны быть указаны в текущей культуре приложения. Возможно, вам захочется поэкспериментировать с установкой CultureInvariantValues в true и посмотреть, решит ли это вашу проблему. В противном случае вам может потребоваться изменить DateTimeFormat для текущей культуры (или культура), чтобы получить то, что вы хотите.