3

我是 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”的方式。任何帮助都非常受欢迎。提前非常感谢!

4

2 回答 2

4

你说的对。e不是日期,它是ServerValidateEventArgs. 你应该Value从那里得到财产。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,则解析失败,在这种情况下,您应该无法通过验证。

于 2012-10-06T10:01:18.363 回答
0

我有一些扩展方法,你可以看看它们可以让你返回一个月的最后一天并比较两个日期......

它们是开源的...... http://zielonka.codeplex.com/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zielonka.co.uk.extensions.system
{
    //DateTime lastDay = DateTime.Now.GetLastDateTimeOfMonth();

    public static partial class DateTimeExtensions
    {
        public static DateTime GetLastDateTimeOfMonth(this DateTime dateTime)
        {
            return new DateTime(dateTime.Year, dateTime.Month, 1).AddMonths(1).AddDays(-1);
        }
    }
}
于 2012-10-06T10:03:04.377 回答