'CompareEndTodayValidator'无法转换为'Date'类型。?

时间:2013-09-27 05:28:36

标签: c# asp.net c#-4.0 date

我有一个日历控件,当选择日期时,它应以“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格式

2 个答案:

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