Валидатор ASP.NET для сравнения двух дат разницы не более 12 месяцев - PullRequest
3 голосов
/ 22 февраля 2010

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

Ответы [ 4 ]

8 голосов
/ 22 февраля 2010

Вы должны будете использовать 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" />
1 голос
/ 07 марта 2013

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

        DateTime start = DateTime.Parse(DateBegin.Text);
        DateTime end = DateTime.Parse(DateEnd.Text);
        TimeSpan ts = end - start;
        e.IsValid = ts.Days < 365;
0 голосов
/ 13 октября 2016

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

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
0 голосов
/ 22 февраля 2010

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

...