2013-09-27 55 views
1

我有一个日历控件,当选择一个日期时,它应该以“dd-mm-yyyy”格式显示在关联的文本框中。并有一个比较验证器,它应该验证所选日期,如果它大于今天的日期。我已经CompareEndTodayValidator 的ValueToCompare财产‘这样写的'CompareEndTodayValidator'不能转换为'Date'类型。

<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' ’不能转换为类型‘日期’。

请大家帮忙。我已经通过改变type =“string”来尝试它。但是失败了。当把mm-dd-yyyy frmat正常工作时,它可以正常工作。但我需要dd-mm-yyyy格式

回答

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

附:

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

P.S.S

如果你想获得更看中你能提供的ClientValidationFunction财产JavaScript方法和验证客户端了。尽管如此,这可能是过度的。

+0

你能帮我用自定义验证写@詹姆斯 – ARATHY

+0

见我最后的编辑 – James

+0

我已经这样做了。不工作。控制不会到ServerValidation() – ARATHY

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; 
    } 
} 
相关问题