Валидатор ASP.NET для сравнения двух дат разница не более 12 месяцев

У меня есть два элемента управления TextBox для ввода даты начала и окончания. Я должен подтвердить, что дата окончания не больше даты начала, а разница между датой начала и датой окончания не превышает 12 месяцев.


person Pragnesh Patel    schedule 22.02.2010    source источник


Ответы (4)


Вам нужно будет использовать CustomValidator сделать это. В вашем markyou у вас будет что-то вроде этого:

<asp:TextBox ID="txbStartDate" runat="server" />
<asp:TextBox ID="txbEndDate" runat="server" />
<asp:CustomValidator OnServerValidate="ValidateDuration"
    ErrorMessage="Dates are too far apart" runat="server" />

И в вашем коде вы определяете обработчик проверки:

protected void ValidateDuration(object sender, ServerValidateEventArgs e)
{
    DateTime start = DateTime.Parse(txbStartDate.Text);
    DateTime end = DateTime.Parse(txbEndDate.Text);

    int months = (end.Month - start.Month) + 12 * (end.Year - start.Year);

    e.IsValid = months < 12.0;
}

Обратите внимание, что приведенный выше код склонен к возникновению исключений. Вам нужно будет добавить дополнительные валидаторы, чтобы проверить, что введенные даты могут быть проанализированы, и метод ValidateDuration должен быть изменен, чтобы подтвердить, что эти другие валидаторы прошли, прежде чем выполнять свои собственные тесты.

Кроме того, вы можете добавить еще один валидатор, чтобы проверить, действительно ли дата окончания больше (или равна) дате начала. Нарушение этого правила, вероятно, должно вызвать собственное сообщение об ошибке проверки.

<asp:CompareValidator Operator="GreaterThanEqual" Type="Date"
    ControlToValidate="txbEndDate" ControlToCompare="txbStartDate"
    ErrorMessage="Let's get started first!" runat="server" />
person Jørn Schou-Rode    schedule 22.02.2010

Также вы можете использовать Timespan:

        DateTime start = DateTime.Parse(DateBegin.Text);
        DateTime end = DateTime.Parse(DateEnd.Text);
        TimeSpan ts = end - start;
        e.IsValid = ts.Days < 365;
person Georgy Grigoryev    schedule 07.03.2013

Быстро и просто: два валидатора, один валидатор сравнения (который сравнивает оба элемента управления) и настраиваемый валидатор с методом на стороне сервера для проверки даты окончания.

person Mike Kingscott    schedule 22.02.2010

А почему ты не об этом

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
person Georgy Grigoryev    schedule 13.10.2016