【问题标题】:compareValidator Compare to textboxes with datescompareValidator 比较带有日期的文本框
【发布时间】:2012-03-05 12:49:41
【问题描述】:

我的比较验证器总是触发,即使它更大或者更小。

<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>

请帮助我不知道该怎么办。

提前致谢

【问题讨论】:

    标签: asp.net vb.net comparevalidator


    【解决方案1】:

    你应该设置

    CultureInvariantValues="false" 
    

    在您的 CompareValidator 中。同样,日期格式应该是您当前文化的格式。 CompareValidator 似乎无法比较 dd MMM yyyy 格式。如果要显示这种格式,可以使用自定义验证器来比较日期:

      <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;
        }
    }
    

    【讨论】:

    • 感谢您的回复我已经添加了您的建议,但仍然这样做。还有什么你认为可能有问题的地方吗?
    • 在calendarextender中,可以使用当前文化的日期格式吗?我不确定它在 GB 中的情况
    • 我已将当前文化设置为 en-GB,我希望格式为 dd mmm yyyy,您是否建议更改为 dd-mm-yyyy ?
    • 是的,我认为 CompareValidator 仅适用于某些日期时间格式,可能不适用于 dd MMM yyyy。
    • 好的,谢谢。有没有其他方法可以与 dd MMM yyyy 格式进行比较?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多