一个月最后一天的自定义验证器-c#

一个月最后一天的自定义验证器-c#,c#,asp.net,C#,Asp.net,我是asp.net的新手,所以请放心:我想创建一个自定义验证器来检查文本框(具有日历扩展名(AJAX))中给定的输入日期是否为一个月的最后一天。以下是我试图做的: protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e) { DateTime dt = Convert.ToDateTime(e.ToString("dd/MMM/yyyy")); DateTim

我是asp.net的新手,所以请放心:我想创建一个自定义验证器来检查文本框(具有日历扩展名(AJAX))中给定的输入日期是否为一个月的最后一天。以下是我试图做的:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e)
{

    DateTime dt = Convert.ToDateTime(e.ToString("dd/MMM/yyyy"));
    DateTime lastOfMonth = new DateTime(dt.Year, dt.Month, 1).AddMonths(1).AddDays(-1);
    if (dt == lastOfMonth)
    {
        e.IsValid = true;
    }
    else
    {
        e.IsValid = false;
    }

}

我认为问题在于我处理对象“e”的方式。任何帮助都非常感激。提前多谢

你说得对
e
不是日期,它是
ServerValidateEventArgs
的一个实例。您应该从那里获得
属性
Value
是一个字符串,需要将其转换为日期时间,然后进行验证

DateTime dt;
if (DateTime.TryParseExact(e.Value, "dd/MMM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{
    // validation of dt here.
}
您需要知道在解析中日期的格式,因此我建议使用
DateTime.TryParseExact
。您还需要传入正确的区域性,即日期的格式,因为解析规则依赖于此-特别是在这种情况下,模式中包含MMM,因为不同区域性之间的格式不同


通常,在解析来自用户输入的日期或数字时,应该使用TryParse系列方法。这些不会导致失败,但返回false。如果返回值为false,则解析失败,在这种情况下,您应该无法通过验证。

我有一些扩展方法,您可以查看这些方法,它们将允许您返回月份的最后一天并比较这两个日期

DateTime dt;
if (DateTime.TryParseExact(e.Value, "dd/MMM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{
    // validation of dt here.
}
他们是开源的


问题是…?请描述您遇到的任何错误行为、引发的异常等。当您向它们传递ServerValidateEventArgs实例时,它们是否不起作用?Ps不是我,谁在用反对票打你,其他人在处理这个问题。我的回答是对Dris回答的补充,因为他提供了获得日期的代码。。。