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

StackOverflow https://stackoverflow.com/questions/2309912

  •  22-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вам придется использовать 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" />

Другие советы

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

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

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

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

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top