CompareValidator Сравнить с текстовыми полями с датами - PullRequest
1 голос
/ 05 марта 2012

Мой валидатор сравнения срабатывает всегда, даже если он больше и даже меньше.

<tr>
    <td>
        Selection Start Date:
    </td>
    <td>
        <asp:TextBox ID="SelectionStartDateTextBox" runat="server" 
                    Text='<%# Bind("SelectionStartDate") %>'></asp:TextBox>
        <asp:RequiredFieldValidator runat="server" ID="RequFilesStart" 
                    ControlToValidate="SelectionStartDateTextBox"
            ErrorMessage="Enter Selection Start date!" ValidationGroup="validation1">
        </asp:RequiredFieldValidator>
    </td>
</tr>
<tr>
    <td>
        Selection End Date:
    </td>
    <td>
        <asp:TextBox ID="SelectionEndDateTextBox" runat="server" 
                   Text='<%# Bind("SelectionEndDate") %>'></asp:TextBox>
        <asp:RequiredFieldValidator runat="server" ID="ReqFiledEnd" 
                    ControlToValidate="SelectionEndDateTextBox"
            ErrorMessage="Enter Selection End date!" ValidationGroup="validation1">
        </asp:RequiredFieldValidator>
        <asp:CompareValidator ID="CompareValSelDate" runat="server" 
            ControlToValidate="SelectionEndDateTextBox"
            ControlToCompare="SelectionStartDateTextBox" 
            CultureInvariantValues="true" Type="Date"
            Operator="LessThanEqual" ValidationGroup="validation1" 
            ErrorMessage="Selection End Date should be greater then Selected start date"
            Display="dynamic">        

        </asp:CompareValidator>
    </td>
</tr>

Я также установил его в Culture = "en-GB" и также настроил в своей веб-конфигурации. Я использую инструментарий Ajax для отображения календаря, прикрепленного к TextBox

<cc1:calendarextender id="Calendarextendera3" runat="server" format="dd MMM yyyy"
            targetcontrolid="SelectionEndDateTextBox">
</cc1:calendarextender>

<cc1:calendarextender id="Calendarextendera4" runat="server" format="dd MMM yyyy"
            targetcontrolid="SelectionStartDateTextBox">
</cc1:calendarextender>

Пожалуйста, помогите, я не знаю, что делать.

Заранее спасибо

1 Ответ

2 голосов
/ 05 марта 2012

Вы должны установить

CultureInvariantValues="false" 

в вашем CompareValidator. Кроме того, формат даты должен соответствовать вашей нынешней культуре. Похоже, что CompareValidator не может сравнивать формат дд МММ гггг. Если вы хотите отобразить этот формат, вы можете использовать специальный валидатор для сравнения дат:

  <asp:CustomValidator runat="server" ID="datesValidator" OnServerValidate="DatesValidator_Validate" ErrorMessage="end date should be greater than  or equal to start date"></asp:CustomValidator>

protected void DatesValidator_Validate(object source, ServerValidateEventArgs args)
{
    DateTime startDate = Convert.ToDateTime(SelectionStartDateTextBox.Text);
    DateTime endDate = Convert.ToDateTime(SelectionEndDateTextBox.Text);

    if (endDate < startDate)
    {
        args.IsValid = false;
    }
}
...