如何从填充中停止DateTime验证器?

时间:2010-02-02 15:35:20

标签: c# .net asp.net

我有一个简单的验证器,应该检查日期格式是否不正确。我正在测试并输入2/14/201 ...它将通过我的验证器传递为2/14/0201。如何防止这种情况并跳转到e.IsValid = false;?

protected void rangeVal(object sender, ServerValidateEventArgs e)
{
    DateTime dateCheck = txtDate1.Text.Trim();
    DateTime select;
    if (DateTime.TryParse(dateCheck, out select))
        e.IsValid = true;
    else
        e.IsValid = false;
}

3 个答案:

答案 0 :(得分:3)

dateCheck应该是字符串而不是DateTime吗?

如果只有日期> 1900年有效,你可以试试:

if (DateTime.TryParse(dateCheck, out select) && dateCheck > default(DateTime))
    e.IsValid = true;
else
    e.IsValid = false;

这可能符合您的要求。

答案 1 :(得分:0)

您可以检查字符串的字符串长度,然后再将其转换为日期时间,您可以在/上拆分字符串并解析年份以确保它在您的范围内有效,您可以添加一个辅助条件,检查TryParse之前的那一年。

答案 2 :(得分:0)

未登记的年份如何有效?

来自MSDN DateTime structure

  

DateTime值类型表示   具有值范围的日期和时间   从1月1日午夜12点开始,   0001 Anno Domini(Common Era)通过   公元9999年12月31日晚上11:59:59   (C.E。)

你应该尝试这样的事情:

protected void rangeVal(object sender, ServerValidateEventArgs e)
{
    DateTime dateCheck = txtDate1.Text.Trim();
    DateTime select;
    if (DateTime.TryParse(dateCheck, out select))
    {
        e.IsValid = IsDateTimeValidForMyApplication(select);
    }
    else
        e.IsValid = false;
}

bool IsDateTimeValidForMyApplication(DateTime dt)
{
    return dt.Year > 2000;   //or whatever business rules your app has...
}