“CompareEndTodayValidator”不能转换为“Date”类型

本文关键字:Date 类型 不能 CompareEndTodayValidator 转换 | 更新日期: 2023-09-27 18:32:55

我有一个日历控件,当选择日期时,它应该以"dd-mm-yyyy"格式显示在关联的文本框中。并有一个比较验证器,如果它大于今天的日期,它应该验证所选日期。我这样写的

<asp:TextBox runat="server" ID="tb_date" BackColor="White" ></asp:TextBox>
     <asp:Calendar ID="EndDate" runat="server" 
                   OnSelectionChanged="EndDate_OnSelectionChanged" 
       </asp:Calendar>
            <asp:CompareValidator runat="server" ID="CompareEndTodayValidator" ErrorMessage="Exam date can't be less than today" 
ControlToValidate="tb_date"   Type="Date" Operator="LessThanEqual" >                </asp:CompareValidator> 

 protected void Page_Load(object sender, EventArgs e)
{ 
 CompareEndTodayValidator.ValueToCompare = DateTime.Now.ToString("dd-MM-yyyy");
}
   protected void EndDate_OnSelectionChanged(object sender, EventArgs e) //COMPARE VALIDATOR FOR EXAM DATE
{
    tb_date.Text = EndDate.SelectedDate.ToString("dd-MM-yyyy");
 }

它显示错误

值 26-09-2013' 属性 "CompareEndTodayValidator"不能转换为"Date"类型。

请帮忙。我已经通过更改类型="字符串"来尝试过。但失败了。当放置 mm-dd-yyyy frmat 时,它可以正常工作。但我需要 dd-mm-yyyy 格式

“CompareEndTodayValidator”不能转换为“Date”类型

问题是您要将所选日历值转换为的日期格式与默认DateTime.Parse不兼容,这是比较器验证器无疑在内部使用的。使用不同的日期格式或使用自定义验证程序控件,以便您可以手动控制日期分析格式。

DateTime date = DateTime.Parse("26-09-2013"); // Fails

我希望这有所帮助。

编辑 - 使用自定义验证器

<asp:CustomValidator runat="server" ID="CompareEndTodayValidatorCust" OnServerValidate="ServerValidation" ControlToValidate="tb_date" ValidateEmptyText="True" ErrorMessage="Exam date can't be less than today" />
protected void ServerValidation (object source, ServerValidateEventArgs arguments)
{
    System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
    string format = "dd-MM-yyyy";
    DateTime dtToValidate = DateTime.ParseExact(tb_date.Text, format, provider);
     arguments.IsValid = (dtToValidate <= DateTime.Now.AddDays(-1));
}

附言

此外,在表单提交处理程序或页面加载方法中,您需要在允许保存操作继续之前检查该Page.IsValid == true

附言

如果你想变得更花哨,你可以在ClientValidationFunction属性中提供一个JavaScript方法,并验证客户端。不过,这可能有点矫枉过正。

尝试使用自定义验证器,如下所示

.ASPX

<asp:TextBox runat="server" ID="tb_date" BackColor="White" ></asp:TextBox>
<asp:Calendar ID="EndDate" runat="server" 
           OnSelectionChanged="EndDate_OnSelectionChanged" ></asp:Calendar>
    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Invalid date">
</asp:CustomValidator><br />

代码隐藏:

protected void EndDate_OnSelectionChanged(object sender, EventArgs e) //COMPARE VALIDATOR FOR EXAM DATE
{
    CustomValidator1.IsValid = true;
    DateTime SelectedDate = EndDate.SelectedDate.Date;
    DateTime NowDate = DateTime.Now;
    tb_date.Text = SelectedDate.ToShortDateString();
    if (SelectedDate.Date > NowDate.Date)
    {
        CustomValidator1.IsValid = false;
    }
}