Я предполагаю, что CompareValidator
не принимает ваш формат.
CompareValidator довольно точно относится к датам, которые он примет.Например, следующие даты не считаются действительными:
- 1 января 2001 года
- 1 января 2001 года
- Пт 04 мая 2012 года
Для CompareValidator требуется дата, которая выглядит следующим образом:
- 1/1/2001
- 1-1-2001
- 5/4/2012
http://www.informit.com/articles/article.aspx?p=25461&seqNum=5
Не протестировав его, вы можете попытаться использовать скрытый TextBox (display:none
) с принятым форматом даты как Текст.Затем установите ControlToValidate
Валидатора в «скрытое поле».Вам нужно синхронизировать оба свойства Text TextBoxes с их скрытыми полями.Может быть, это дает вам идею.
Редактировать : Хорошо, я пытался заставить его работать так, как я сказал, и на самом деле это работает :) Может быть, возможен какой-то рефакторинг, но посмотрите сами.
Чтобы скрыть TextBox с форматом рабочей даты, я использовал CSS:
<style type="text/css">
.hidden
{
display:none;
}
</style>
Эти JS-функции вызываются, когда пользователь изменяет дату через CalendarExtenders:
<script type="text/javascript">
function dateChangedStart(sender, args) {
var selectedDate = sender.get_selectedDate();
var hiddenStart = $get("txtStartDateHidden");
var validator = $get("startDateCompareValidator");
hiddenStart.value = dateToString(selectedDate);
ValidatorValidate(validator);
}
function dateChangedEnd(sender, args) {
var selectedDate = sender.get_selectedDate();
var hiddenEnd = $get("txtEndDateHidden");
var validator = $get("startDateCompareValidator");
hiddenEnd.value = dateToString(selectedDate);
ValidatorValidate(validator);
}
function dateToString(d) {
var year = d.getFullYear();
var month = d.getMonth() + 1; //months are zero based
var day = d.getDate();
return year + "/" + month + "/" + day;
}
</script>
Это остальная часть образца страницы:
<div>
<asp:TextBox ID="txtStartDate" CausesValidation="false" ReadOnly="true" runat="server">
</asp:TextBox>
<asp:TextBox ID="txtStartDateHidden" CssClass="hidden" ValidationGroup="DateCheck" CausesValidation="true" ReadOnly="false" runat="server">
</asp:TextBox>
<ajax:CalendarExtender ID="StartDateCalendar" TargetControlID="txtStartDate" runat="server"
OnClientDateSelectionChanged="dateChangedStart"
Format="ddd MM dd, yyyy">
</ajax:CalendarExtender>
<asp:CompareValidator ID="startDateCompareValidator" runat="server" EnableClientScript="true"
ControlToValidate="txtStartDateHidden" Display="Static" Operator="LessThanEqual" ValidationGroup="DateCheck"
ControlToCompare="txtEndDateHidden" Enabled="true" Type="Date" Text="Startdate should be <= enddate">
</asp:CompareValidator>
<asp:TextBox ID="TxtEndDate" CausesValidation="false" ReadOnly="true" runat="server">
</asp:TextBox>
<asp:TextBox ID="txtEndDateHidden" CssClass="hidden" ValidationGroup="DateCheck" CausesValidation="true" ReadOnly="false" runat="server">
</asp:TextBox>
<ajax:CalendarExtender ID="EndDateCalendar" TargetControlID="txtEndDate" runat="server"
OnClientDateSelectionChanged="dateChangedEnd"
Format="ddd MM dd, yyyy">
</ajax:CalendarExtender>
<asp:Button ID="BtnSubmit" CausesValidation="true" ValidationGroup="DateCheck" runat="server" Text="Submit" />
</div>