我有一个日历控件,当选择日期时,它应以“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");
}
显示错误
ValueToCompare属性的值'26 -09-2013' 'CompareEndTodayValidator'无法转换为'Date'类型。
请帮忙。我通过改变type =“string”尝试了它。但是失败了。当把mm-dd-yyyy frmat放好时,它能正常工作。但我需要的是dd-mm-yyyy格式
答案 0 :(得分:1)
问题是您将所选日历值转换为的日期格式与默认DateTime.Parse
不兼容,这是Comparer验证器无疑在内部使用的内容。使用其他日期格式或使用CustomValidator控件,以便您可以手动控制日期分析格式。
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));
}
P.S。
同样在表单提交处理程序或页面加载方法中,您需要在允许保存操作继续之前检查Page.IsValid == true
。
P.S.S
如果您想获得更多想象力,可以在ClientValidationFunction
属性中提供JavaScript方法并验证客户端。但这可能有点过头了。
答案 1 :(得分:1)
尝试 CustomValidator ,如下所示
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;
}
}