1

我有一个调整器控制,选择日期时,应显示在“ 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");
 }

它显示一个错误

“CompareEndTodayValidator”的 ValueToCompare 属性的值“26-09-2013”​​无法转换为“日期”类型。

请帮忙。我已经通过更改 type="string" 进行了尝试。但失败了。当放置 mm-dd-yyyy frmat 时它可以正常工作。但我需要 dd-mm-yyyy 格式

4

2 回答 2

1

问题是您将所选日历值转换为的日期格式与 default 不兼容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在允许保存操作继续之前进行检查。

PSS

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

于 2013-09-27T05:47:55.403 回答
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;
    }
}
于 2013-09-27T07:28:01.513 回答