Проверка даты с помощью валидатора ASP.NET - PullRequest
65 голосов
/ 02 июня 2009

Я пытаюсь использовать 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>

Ответы [ 4 ]

127 голосов
/ 02 июня 2009

Лучший вариант будет

Добавить средство сравнения в веб-форму. Установите его controlToValidate. Установите для его свойства Type значение Date. Установите для его свойства оператора значение DataTypeCheck, например:

<asp:CompareValidator
    id="dateValidator" runat="server" 
    Type="Date"
    Operator="DataTypeCheck"
    ControlToValidate="txtDatecompleted" 
    ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>
28 голосов
/ 02 июня 2009

CustomValidator также будет работать здесь:

<asp:CustomValidator runat="server"
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted"
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" />

Код-за:

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);
}
7 голосов
/ 31 января 2012

Я думаю, что это самый простой способ сделать это.

<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>
2 голосов
/ 02 июня 2009

Я считаю, что даты должны быть указаны в текущей культуре приложения. Возможно, вы захотите поэкспериментировать с установкой CultureInvariantValues ​​ в true и посмотреть, решит ли это вашу проблему. В противном случае вам может потребоваться изменить DateTimeFormat для текущей культуры (или самой культуры ), чтобы получить то, что вы хотите.

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