“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 格式
问题是您要将所选日历值转换为的日期格式与默认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;
}
}