У меня есть два элемента управления TextBox
для ввода даты начала и окончания. Я должен подтвердить, что дата окончания не больше даты начала, а разница между датой начала и датой окончания не превышает 12 месяцев.
Валидатор ASP.NET для сравнения двух дат разница не более 12 месяцев
Ответы (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" />
Также вы можете использовать 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;